java - write方法如何与对象的clone方法类似?

标签 java class oop object access-specifier

我观察到clone是Object类的方法,而Object是每个类的父类(super class)。在每个类中,我都会将克隆作为重写方法,假设我创建名为 A 的类,如果我没有重写 class Aclone 方法code>,并为 A 创建了一个对象,但我无法访问对象中的克隆方法

我在 oop 中缺少什么概念

最佳答案

有两个问题:首先,clone()Objectprotected 方法,因此只能在对象内部调用它。子类,除非您覆盖它并将其公开。其次,除非您的类实现了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 block 并声明您的 clone() 方法来抛出 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);
         }
    }
}

关于java - write方法如何与对象的clone方法类似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089308/

相关文章:

c++ - 如何实例化一个主窗口函数可以访问的对象?

java - 按字母顺序排列字符串中的字符,然后将按字母顺序排列的字符放入新字符串中?

java - 使用动态 TCP 端口的 JDBC 连接到 SQL 服务器

html - HTML 中的类描述是否重叠?

c++ - 在 B 类中使用 A 类类型的 vector

java - 从java中的类型创建ArrayList

PHP 将数组转换为类内的对象。那可能吗?

java - 如何在java中使用mongodb嵌入模式

java - mappedBy 引用未知的目标实体属性 - hibernate 错误

r - `NextMethod()` 的内部工作原理