我有一个方法,它获取一个抽象类作为参数,用于多态性。但在方法内部,我想返回一个实际对象的副本。
示例:
//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();