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



我有一个方法,它获取一个抽象类作为参数,用于多态性。但在方法内部,我想返回一个实际对象的副本。

示例:

//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(),但在基类中遇到了同样的问题。如何正确地做到这一点?

谢谢。

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

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();

最新更新