如果 subclass extends abstract class,clone 方法的语法是什么?

what the syntax for clone method if the subclass extends abstract class?

例如,class A 实现可克隆及其抽象 class,class B 扩展 class A

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

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

clone方法中?

不,您可以将 clone() in B 实现为:

public B clone() {
    try {
        return (B) super.clone();
    } catch (CloneNotSupportedException e) {
        throw new IllegalStateException(e);
    }
}

注意:clone()方法没有定义在Cloneable接口中。 Cloneable 只是一个所谓的 'marker' 接口。所以 A 根本不需要 clone() 方法。

(您也可以将该方法声明为抛出 CNSE 并让调用者处理它。另请注意 clone()Cloneable 这些天有些不受欢迎。考虑简单地提供一个副本构造函数而不是采用 B 并复制其字段的值。)