使用 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
) 的旧实例相同的所有变量配置. (例如 name
、jersey
...)
有没有 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
.
的属性
我不确定从 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
) 的旧实例相同的所有变量配置. (例如 name
、jersey
...)
有没有 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
.