我不确定从父母到孩子或从B
创建extends A
(A
)的最佳做法是什么。
作为一个例子,我有两个类:
父母:
public class SoccerPlayer {
private String name;
private SoccerShoe shoe;
private SoccerJersey jersey;
/* ... */
}
和孩子一起:
public class Goalkeeper extends SoccerPlayer {
private GoalkeeperGlove glove;
/* ... */
}
现在一名普通的足球运动员想成为守门员。我能做什么?显然以下方法不起作用:
SoccerPlayerArrayOfTeamA[0] = new SoccerPlayer("Robert");
/*... new career path ...*/
SoccerPlayerArray[0] = (Goalkeeper) SoccerPlayerArray[0]
但这就是我要说的“我想做”......
子类的新实例(Goalkeeper
)应该将所有变量配置作为父类的旧实例(SoccerPlayer
)。 (例如name
,jersey
...)
有没有OOP方法我必须手动设置每个变量,如下所示?
/*... new career path ...*/
SoccerPlayer temp = SoccerPlayerArray[0]
SoccerPlayerArray[0] = new Goalkeeper(temp.getName());
SoccerPlayerArray[0].setJersey(temp.getJersey());
答案 0 :(得分:2)
Checkout Decorator设计模式。例如。 Java IO类。
当任何对象动态想要更改其行为时,您可以使用所需对象包装该对象。就像C wants to become B
一样,B应该有一个接受C的构造函数,然后B中的方法应该在适当的地方使用C.最好的例子是FileInputStream wants to become BufferedInputStream
时,您可以通过在其构造函数中传递BufferedInputStream
来创建FileInputStream
,但不需要复制FileInputStream
的属性。
答案 1 :(得分:1)
向Goalkeeper添加一个复制构造函数,接受SoccerPlayer作为参数。