复制包含另一个对象的超类的对象

时间:2014-12-24 18:32:16

标签: java oop copy-constructor

我想创建一个包含另一个对象的超类的对象的副本。在此示例中,我想制作包含Box的{​​{1}}的副本。但是所有类型的玩具都可以装在盒子里。在Toy中创建复制构造函数的最佳方法是什么?

Toy

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

3 个答案:

答案 0 :(得分:6)

Toy有一个抽象方法copy(),返回类型为Toy。然后,您将被迫在CarPuppet中覆盖此内容。在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方法,让他们私密!