我想创建一个包含另一个对象的超类的对象的副本。在此示例中,我想制作包含Box
的{{1}}的副本。但是所有类型的玩具都可以装在盒子里。在Toy
中创建复制构造函数的最佳方法是什么?
Toy
我真的不知道如何解决这个问题。
答案 0 :(得分:6)
让Toy
有一个抽象方法copy()
,返回类型为Toy
。然后,您将被迫在Car
和Puppet
中覆盖此内容。在Box
的复制构造函数中,您可以使用box.getToy().copy()
。
答案 1 :(得分:1)
您可以覆盖每个Toy
子类的克隆方法,然后:
public Box(Box box) {
this.toy = (Toy) box.getToy().clone();
}
或者,如果你有一定数量的玩具类型,你可以使用枚举而不是类。
答案 2 :(得分:0)
我认为这个结构可以帮助你有一个想法,在这种情况下我们使用Box Constructor传递一个Object玩具到SuperClass(玩具),在玩具类中我们有一个构造函数来接受玩具类中的对象然后它调用getInstance初始化玩具对象的方法(仅举例)。
class Box extends Toy
{
public Box(Toy toy)
{
super(toy);
}
}
Class Toy
{
private static Toy toys = new Toy();
Toy(){}
Toy(Toy toy)
{
toy = Toy.getInstance();
}
public static Toy getInstance()
{
return toys;
}
}
或者,如果你不希望其他类(子类)看不到指定的方法和属性只是将它们设为私有,并且如果你想要子类也无法访问set和get方法,让他们私密!