Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何克隆声明为它的对象';什么是抽象超类?_Java_Clone_Instantiation_Copy Constructor - Fatal编程技术网

Java 如何克隆声明为它的对象';什么是抽象超类?

Java 如何克隆声明为它的对象';什么是抽象超类?,java,clone,instantiation,copy-constructor,Java,Clone,Instantiation,Copy Constructor,我有一个方法,它获取一个抽象类作为参数,用于多态性。 但是在这个方法中,我想返回一个实际对象的副本 例如: 我尝试使用如上所示的复制构造函数,但它无法实例化抽象。 我曾想过在基类中定义一个clone(),但在基类中遇到了同样的问题。 如何做到这一点 谢谢。除非您想依赖,否则最好在Animal中创建一个抽象的copy方法,并确保所有子类都正确覆盖它 abstract class Animal { ... // Needs to be implemented by subclass

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

例如:

我尝试使用如上所示的复制构造函数,但它无法实例化抽象。 我曾想过在基类中定义一个
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();

所有子类都可以复制与基类中定义的所有属性相同的属性,区别在于某些方法的定义不同,因此没有必要在每个子类中编写一个对所有方法都相同的copy\clone方法。谢谢,我明白了。不幸的是,这对你没有帮助。你还是得听从我的建议。你可以做的是在
Animal
中创建一个helper方法,上面写着
copyAnimalMembers
等等,它完成了这项工作,你可以在
Dog.copy
Cat.copy
中调用它。这样可以避免在所有子类中复制粘贴代码。
return a.copy();