首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型创造模式

原型创造模式
EN

Stack Overflow用户
提问于 2016-10-30 12:18:05
回答 2查看 45关注 0票数 0

在java中,我想了解的是为什么抽象类实现了这个接口,而抽象类中仍然没有克隆()方法的实现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-30 12:54:29

在java中,我想了解的是为什么抽象类实现了这个接口,而抽象类中仍然没有克隆()方法的实现。

对象类为Objectclone()方法提供默认实现。

当您查看Object类时,可以看到clone()在其签名中指定了一个特定的关键字:native

代码语言:javascript
复制
protected native Object clone() throws CloneNotSupportedException;

native关键字被应用于一个方法,以指示它是在JNI()中实现的。

因此,实现存在于某个地方(可能在C函数中,但不完全是.)但不是直接在Java源代码中的方法。

最后,您应该考虑Cloneable interface代表什么:标记interface。如果你想反对克隆,实现这一点,如果你不在乎,什么也不做:

类实现了Cloneable接口,以向Object.clone()方法表明该方法对该类实例的字段副本是合法的。在不实现Cloneable接口的实例上调用对象的克隆方法将导致抛出异常CloneNotSupportedException。

现在,如果clone()方法的默认实现(浅拷贝)与如何克隆对象不匹配,那么可以在该对象的类中重写clone()

票数 0
EN

Stack Overflow用户

发布于 2016-10-30 12:38:01

接口Cloneable只是标记类支持Object.clone()中的克隆方法。

类实现了Cloneable接口,以向Object.clone()方法表明该方法对该类实例的字段副本是合法的。

您不必实现此方法,Object.clone在本机代码中为您执行此操作:

代码语言:javascript
复制
protected native Object clone() throws CloneNotSupportedException;

看看这些链接:对象类源代码克隆接口文档

尽管如此,如果在等级级别上有一个抽象类,则不必在子类中实现Cloneable:

代码语言:javascript
复制
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的克隆

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40328970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档