【问题标题】:what the syntax for clone method if the subclass extends abstract class?如果子类扩展抽象类,克隆方法的语法是什么?
【发布时间】:2018-05-20 11:49:57
【问题描述】:

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

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

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

clone 方法中?

【问题讨论】:

标签: java clone


【解决方案1】:

不,你可以在 B 中实现 clone() 为:

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

注意:clone() 方法未在Cloneable 接口中定义。 Cloneable 只是一个所谓的“标记”界面。所以A 根本不需要clone() 方法。

(您也可以将该方法声明为抛出 CNSE 并让调用者处理它。还要注意 clone()Cloneable 这些天有点不受欢迎。考虑简单地提供一个复制构造函数来代替采用 @ 987654331@ 并复制其字段的值。)

【讨论】:

  • 谢谢,所以如果我在A类中有一些变量,如int,string,它会复制它作为深度克隆方法吗?喜欢它会创建一个新的 B 对象吗?
  • @naor 它将创建一个新的 B 对象并复制所有字段,甚至包括在 B 的超类中声明的字段,例如 A,但对于深度克隆,如果它包含,比如说,a列表,克隆将获得对该列表的引用的副本。因此,如果您修改原始列表(例如,通过添加项目),更改也会出现在克隆中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多