java - 如何克隆被声明为抽象父类(super class)的对象?

标签 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() 但我在基类中遇到了同样的问题。 如何正确执行此操作?

谢谢。

最佳答案

除非你想依赖dodgy Object.clone method ,您最好在 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();

关于java - 如何克隆被声明为抽象父类(super class)的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9444031/

相关文章:

javascript - 当我们设置更新的对象时如何在 Backbone 模型上触​​发更改事件

javascript - 如何使用 jquery 更改克隆下拉列表的 id

java - 为什么在调用子类的特定方法时必须转换对象?

arrays - 在类中实例化对象数组

java - Log4j:以编程方式更改日志级别,适用于要创建的记录器

java - 安卓 USB 转 Java (PC)

java - Hadoop安装目录

git clone 和 checkout 在一个命令中

objective-c - 动态实例化对象 Objective-C

java - 包含多个 "keys"的列表对象