如何克隆被声明为抽象超类的对象?

时间:2012-02-25 12:36:32

标签: java clone instantiation copy-constructor

为了多态,我有一个方法将抽象类作为参数。 但是在方法内部我想要返回实际对象的副本。

实施例:

//Animal is an abstract class
public Animal findAndClone(Animal[] zoo){
  for (Animal a:zoo)
    //find some animal...
    return new Animal(a) //cant instantiate an abstract class 
}

我尝试使用如上所示的复制构造函数,但它无法实例化抽象。 我想在基类中定义clone(),但我在基类中遇到了同样的问题。 怎么做对了?

谢谢。

1 个答案:

答案 0 :(得分:1)

除非您想依赖dodgy Object.clone method,否则最好在copy中创建一个抽象的Animal方法,并确保所有子类都正确地覆盖它。

abstract class Animal {
    ...
    // Needs to be implemented by subclasses. A Dog returns a Dog, etc...
    public abstract Animal copy();
    ...
}

然后而不是做

return new Animal(a);
你做了

return a.copy();