首页 > 解决方案 > 了解有关 Java Object 类的一些设计事实

问题描述

我学到了这一点,Object.clone()并且Cloneable做出了一些糟糕的设计决定。但是我还有一些疑问:

  1. 为什么Object.clone()有受保护的修饰符,而其他Object.toString()Object.equals()却没有protected?为什么要让来自不同包的非子类无法访问,而不是像andclone()一样让它们公开?toString()equals()

  2. 这个页面说:

    对象克隆是一种受保护的方法,因此我们必须重写它才能与其他类一起使用。

    我觉得上述事实是完全错误的,因为protected修饰符没有施加任何此类限制。我们仍然可以调用clone(),但它会抛出运行时异常,而不是编译时异常。

  3. Java中的每个类如何都是类的子Object类?最有可能的答案是“设计”。但我想知道这个事实在哪里执行?通常要扩展一个类,我们使用extends关键字。但是我们不会让每个自定义类都这样做extends Object。那么它发生在哪里呢?编译器是否通过强制执行此类限制来自动生成字节码?

标签: java

解决方案


推荐阅读