我想创建一个包含另一个对象的超类的对象的副本。在这个例子中,我想复制包含Toy
的Box
。但是,所有类型的玩具都可以放在箱子里。在Toy
中创建复制构造函数的最佳方法是什么?复制一个包含另一个对象的超类的对象
我真的不知道如何解决这个问题。
我想创建一个包含另一个对象的超类的对象的副本。在这个例子中,我想复制包含Toy
的Box
。但是,所有类型的玩具都可以放在箱子里。在Toy
中创建复制构造函数的最佳方法是什么?复制一个包含另一个对象的超类的对象
我真的不知道如何解决这个问题。
品牌Toy
有一个抽象方法copy()
返回类型Toy
。那么您将被迫在Car
和Puppet
中覆盖此项。在Box
的复制构造函数中,您可以使用box.getToy().copy()
。
您可以覆盖每个Toy
的子类的clone方法,然后:
public Box(Box box) {
this.toy = (Toy) box.getToy().clone();
}
或者,如果你有一个类型玩具的常数,您可以使用,而不是一类的枚举。
我认为这个结构可以帮助你有一个想法,在这种情况下,我们将一个使用Box构造函数的对象玩具传递给超类(玩具类),并且在玩具类中我们有一个构造函数来接受来自玩具类的对象,初始化玩具对象的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;
}
}
,要么,如果你不希望其他类(子类)看不到规定的方法和属性,只是让他们私人的,如果你想子类都不能访问设置和也获得方法,使他们只有私人!
为什么要为此创建特定的方法? 'Object.clone'已经有了这个语义 – Dici
你可以使用'clone()'。我宁愿避免它,但因为它是一团糟('Cloneable'没有'clone'方法等)。 –
我认为使用Cloneable是完全安全的。请参阅文档:http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html – Dici