gpt4 book ai didi

java - 使用父配置或 'downcast parent to child' 实例化子对象

转载 作者:行者123 更新时间:2023-12-01 22:24:40 26 4
gpt4 key购买 nike

我不确定从父级向下转换为子级或从 A 创建 B (扩展 A)的最佳实践是什么.

作为一个例子,我有两个类:

父级:

public class SoccerPlayer  {

private String name;
private SoccerShoe shoe;
private SoccerJersey jersey;
/* ... */
}

还有 child :

public class Goalkeeper extends SoccerPlayer {

private GoalkeeperGlove glove;
/* ... */
}
<小时/>

现在,一名普通足球运动员想成为一名守门员。我能做些什么?显然下面的方法是行不通的:

    SoccerPlayerArrayOfTeamA[0] = new SoccerPlayer("Robert");

/*... new career path ...*/

SoccerPlayerArray[0] = (Goalkeeper) SoccerPlayerArray[0]

但这就是我想说的“我想做”......
子类 (Goalkeeper) 的新实例应具有与父类 (SoccerPlayer) 的旧实例相同的所有变量配置。 (例如姓名 Jersey ...)有没有一种 OOP 方法可以做到这一点,我必须手动设置每个变量,如下所示?

    /*... new career path ...*/

SoccerPlayer temp = SoccerPlayerArray[0]
SoccerPlayerArray[0] = new Goalkeeper(temp.getName());
SoccerPlayerArray[0].setJersey(temp.getJersey());

最佳答案

查看装饰器设计模式。例如。 Java IO 类。

当任何对象动态地想要改变其行为时,您可以用所需的对象包装该对象。就像如果 C 想成为 B,那么 B 应该有一个接受 C 的构造函数,然后 B 中的方法应该在适当的地方使用 C。最好的例子是,当 FileInputStream 想成为 BufferedInputStream 时,您可以通过在其构造函数中传递 FileInputStream 来创建 BufferedInputStream ,但不需要复制 BufferedInputStream 的属性文件输入流

关于java - 使用父配置或 'downcast parent to child' 实例化子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com