如何不扩展 Java 中的对象 class?
How to not extend the Object class in Java?
默认情况下,Java 中的每个 class 都会扩展 Object
class。 (所以总是会出现单继承)
有没有不扩展对象class的class? (例如,int 可能是 class int 的实例,但不是对象)
我们能否以某种方式创建不扩展 Object
的自己的 class?也许通过修改 javac
的最终代码使其不扩展对象 class 并且可能创建我们自己的 class 来超越对象 class 的构造函数至少要避免的事情异常行为?
int
是原始的,因此我们不能说它扩展了任何东西。
关于您的问题:
Is there any class that does not extend Object class?
您已经按字面意思回答了上面一行:
every class in Java extends the Object class
P.S.: 我们不能说存在双重继承,因为 class 扩展了 Object
和其他一些 class,因为 "other class" 也扩展了 Object
。事实上,class 是其所有超类型的子类型,例如:
HashMap m = new LinkedHashMap();
AbstractMap m = new LinkedHashMap();
Object m = new LinkedHashMap();
为简洁起见省略了类型参数。
编辑:参考关于什么是对象什么不是对象的讨论,JLS §4.3.1 给出了答案:
An object is a class instance or an array.
默认情况下,Java 中的每个 class 都会扩展 Object
class。 (所以总是会出现单继承)
有没有不扩展对象class的class? (例如,int 可能是 class int 的实例,但不是对象)
我们能否以某种方式创建不扩展 Object
的自己的 class?也许通过修改 javac
的最终代码使其不扩展对象 class 并且可能创建我们自己的 class 来超越对象 class 的构造函数至少要避免的事情异常行为?
int
是原始的,因此我们不能说它扩展了任何东西。
关于您的问题:
Is there any class that does not extend Object class?
您已经按字面意思回答了上面一行:
every class in Java extends the Object class
P.S.: 我们不能说存在双重继承,因为 class 扩展了 Object
和其他一些 class,因为 "other class" 也扩展了 Object
。事实上,class 是其所有超类型的子类型,例如:
HashMap m = new LinkedHashMap();
AbstractMap m = new LinkedHashMap();
Object m = new LinkedHashMap();
为简洁起见省略了类型参数。
编辑:参考关于什么是对象什么不是对象的讨论,JLS §4.3.1 给出了答案:
An object is a class instance or an array.