使用 Parent 配置或 'downcast parent to child' 实例化 Child Object

Instantiate Child Object with Parent config or 'downcast parent to child'

我不确定从 parent 向下转型到 child 或从 A 中创建 B (extends A) 的最佳实践是什么.

例如我有两个 classes:

parent一个:

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]

但这就是我要说的 "I want to do"...
child class (Goalkeeper) 的新实例应具有与 parent class (SoccerPlayer) 的旧实例相同的所有变量配置. (例如 namejersey ...) 有没有 OOP 方法可以做到这一点?我必须手动设置每个变量,如下所示?

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

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

向接受 SoccerPlayer 作为参数的 Goalkeeper 添加一个复制构造函数。

结帐装饰器设计模式。例如。 Java 输入输出 类.

当任何对象动态地想要更改其行为时,您可以用所需的对象包装该对象。就像 if C wants to become B 那么 B 应该有一个接受 C 的构造函数,然后 B 中的方法应该在适当的地方使用 C。最好的例子是当 FileInputStream wants to become BufferedInputStream 你可以通过在它的构造函数中传递 FileInputStream 来创建 BufferedInputStream 但它不需要复制 FileInputStream.

的属性