类不扩展java.lang.Object

Aja*_*jay 4 java compiler-construction inheritance

在Java中创建用户定义的类时,不要将其指定为扩展Object.但是这个类仍然是一个对象.这是如何运作的?javac或JVM如何将类的所有属性注入用户定义的类?

Dav*_*d Z 12

如果您实际上没有编写extends Object,编译器会为您插入它.

编辑:显然我对是否实际插入代码造成了一些混淆.我不完全确定自己,所以我做了一个小实验:在文件中创建以下类test.java:

public class test {}
Run Code Online (Sandbox Code Playgroud)

并编译它,然后运行

javap -c test
Run Code Online (Sandbox Code Playgroud)

反汇编字节码.看看会发生什么:

Compiled from "test.java"
public class test extends java.lang.Object{
public test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."":()V
   4:   return

}

所以,是的,编译器确实实际插入extends java.lang.Object(或等效的字节码)到类中.

  • 真正的问题是,你如何让人们停止写作**在他们的代码中扩展Object**? (4认同)