【问题标题】:How can write method act similar to clone method of object?写方法如何类似于对象的克隆方法?
【发布时间】:2013-12-04 01:17:59
【问题描述】:

我观察到克隆是Object 类的方法,Object 是每个类的超类。在每个类中,我都将克隆作为覆盖方法,假设我创建名称为 A 的类,如果我没有在 class A 覆盖 clone 方法,并为 A 创建了一个对象,但我没有获得访问权限对象中的克隆方法

我在 oop 中缺少什么概念

【问题讨论】:

    标签: java class oop object access-specifier


    【解决方案1】:

    有两个问题:首先,clone() 是Object 的protected 方法,所以它只能从子类中调用,除非你重写它并使其公开。其次,除非您的类实现了Cloneable,否则调用clone() 将抛出CloneNotSupportedException。典型的做法是:

    class A implements Cloneable {
        public Object clone() {
             try {
                 return super.clone();
             } catch (CloneNotSupportedException e) {
                 throw new RuntimeException("Impossible exception!", e);
             }
        }
    }
    

    (您可以消除 try/catch 块并将您的 clone() 方法声明为 throw CloneNotSupportedException。该方法会更简单,但所有调用代码都必须处理异常。)

    由于 Java 允许您在重写方法时缩小返回类型,您可以重新定义 clone() 以返回 A,从而避免调用代码必须强制转换:

    class A implements Cloneable {
        public A clone() {
             try {
                 return (A) super.clone();
             } catch (CloneNotSupportedException e) {
                 throw new RuntimeException("Impossible exception!", e);
             }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 2014-07-02
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多