Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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 - Fatal编程技术网

Java 如果子类扩展了抽象类,克隆方法的语法是什么?

Java 如果子类扩展了抽象类,克隆方法的语法是什么?,java,clone,Java,Clone,例如,类A实现了可克隆,它是一个抽象类,类B扩展了类A 假设我只在类B中需要克隆方法。 我还需要使用吗 A result = (A)super.clone(); 在clone方法中?否,您只需在B中实现clone(),如下所示: public B clone() { try { return (B) super.clone(); } catch (CloneNotSupportedException e) { throw new IllegalS

例如,类A实现了可克隆,它是一个抽象类,类B扩展了类A

假设我只在类B中需要克隆方法。 我还需要使用吗

A result = (A)super.clone();

clone
方法中?

否,您只需在
B
中实现
clone()
,如下所示:

public B clone() {
    try {
        return (B) super.clone();
    } catch (CloneNotSupportedException e) {
        throw new IllegalStateException(e);
    }
}
注意:
clone()
方法未在
Cloneable
界面中定义
Cloneable
只是一个所谓的“标记”接口。所以
A
根本不需要
clone()
方法


(您也可以声明方法为抛出CNSE并让调用方处理它。注意,<代码> CURONE()/代码>和<代码>可克隆< /代码>这几天有点不受欢迎。考虑简单地提供一个复制构造函数,而不是使用<代码> B/COD>并复制它的字段的值。)/P>可能的感谢的副本,所以,如果我在一个类中有一些变量,比如int,string,它会将它作为一个深度克隆方法复制吗?是否会创建一个新的B对象?@naor它会创建一个新的B对象并复制所有字段,甚至是在B超类(如a)中声明的字段,但对于深度克隆,如果它包含(例如)列表,克隆将获得列表引用的副本。因此,如果在原始列表中修改列表(例如,通过添加项目),更改也会出现在克隆中。