原型创建模式

Prototype Creation Pattern

在java中我们有可克隆的接口我想了解的是为什么抽象class实现了那个接口仍然没有实现抽象接口的clone()方法class ?

接口Cloneable只是为了标记class支持Object.clone()中的clone方法。

A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class.

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

protected native Object clone() throws CloneNotSupportedException;

查看这些链接: Object class source codeCloneable Interface docs

尽管如此,如果您在层次结构级别中有一个抽象 class,则不必在子级中实现 Cloneable class:

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

In java we have and interface cloneable What I want to understand is why abstract class implements that interface there is still no implementation of clone() method of interface in abstract class ?

对象 class 为 Object 的方法提供默认实现,其 clone() 方法。

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

protected native Object clone() throws CloneNotSupportedException;

native关键字应用于一个方法,表明它是在JNI(Java Native Interface)中实现的。
因此,实现存在于某处(可能在 C 函数中但不完全......)但不直接在方法的 Java 源代码中。

最后,您应该将 Cloneable interface 视为它所代表的含义:标记 interface。如果你希望你的对象是可克隆的,实现这个,如果你不在乎,什么也不做:

A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class. Invoking Object's clone method on an instance that does not implement the Cloneable interface results in the exception CloneNotSupportedException being thrown.

现在,如果 clone() 方法(浅拷贝)的默认实现与您希望克隆对象的方式不匹配,请随意覆盖 [=38= 中的 clone() ] 这个对象。