2014-12-24 85 views
1

我想创建一个包含另一个对象的超类的对象的副本。在这个例子中,我想复制包含ToyBox。但是,所有类型的玩具都可以放在箱子里。在Toy中创建复制构造函数的最佳方法是什么?复制一个包含另一个对象的超类的对象

​​

我真的不知道如何解决这个问题。

回答

6

品牌Toy有一个抽象方法copy()返回类型Toy。那么您将被迫在CarPuppet中覆盖此项。在Box的复制构造函数中,您可以使用box.getToy().copy()

+0

为什么要为此创建特定的方法? 'Object.clone'已经有了这个语义 – Dici

+1

你可以使用'clone()'。我宁愿避免它,但因为它是一团糟('Cloneable'没有'clone'方法等)。 –

+0

我认为使用Cloneable是完全安全的。请参阅文档:http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html – Dici

1

您可以覆盖每个Toy的子类的clone方法,然后:

public Box(Box box) { 
    this.toy = (Toy) box.getToy().clone(); 
} 

或者,如果你有一个类型玩具的常数,您可以使用,而不是一类的枚举。

0

我认为这个结构可以帮助你有一个想法,在这种情况下,我们将一个使用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; 
    } 
} 

,要么,如果你不希望其他类(子类)看不到规定的方法和属性,只是让他们私人的,如果你想子类都不能访问设置和也获得方法,使他们只有私人!

相关问题