使用父配置实例化子对象或者将父母简化为父对象'

时间:2015-03-13 12:39:56

标签: java oop inheritance casting

我不确定从父母到孩子或从B创建extends AA)的最佳做法是什么。

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

父母:

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)。 (例如namejersey ...) 有没有OOP方法我必须手动设置每个变量,如下所示?

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

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

2 个答案:

答案 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作为参数。