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(或等效的字节码)到类中.