在java中,我想了解的是为什么抽象类实现了这个接口,而抽象类中仍然没有克隆()方法的实现。
发布于 2016-10-30 12:54:29
在java中,我想了解的是为什么抽象类实现了这个接口,而抽象类中仍然没有克隆()方法的实现。
对象类为Object的clone()方法提供默认实现。
当您查看Object类时,可以看到clone()在其签名中指定了一个特定的关键字:native。
protected native Object clone() throws CloneNotSupportedException;native关键字被应用于一个方法,以指示它是在JNI()中实现的。
因此,实现存在于某个地方(可能在C函数中,但不完全是.)但不是直接在Java源代码中的方法。
最后,您应该考虑Cloneable interface代表什么:标记interface。如果你想反对克隆,实现这一点,如果你不在乎,什么也不做:
类实现了Cloneable接口,以向Object.clone()方法表明该方法对该类实例的字段副本是合法的。在不实现Cloneable接口的实例上调用对象的克隆方法将导致抛出异常CloneNotSupportedException。
现在,如果clone()方法的默认实现(浅拷贝)与如何克隆对象不匹配,那么可以在该对象的类中重写clone()。
发布于 2016-10-30 12:38:01
接口Cloneable只是标记类支持Object.clone()中的克隆方法。
类实现了Cloneable接口,以向Object.clone()方法表明该方法对该类实例的字段副本是合法的。
您不必实现此方法,Object.clone在本机代码中为您执行此操作:
protected native Object clone() throws CloneNotSupportedException;看看这些链接:对象类源代码和克隆接口文档
尽管如此,如果在等级级别上有一个抽象类,则不必在子类中实现Cloneable:
abstract class Animal implements Cloneable {
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
@Override
public Dog clone() throws CloneNotSupportedException {
return (Dog)super.clone();
}仍然支持Java的克隆
https://stackoverflow.com/questions/40328970
复制相似问题