子类对象的实例化过程:
1.JVM先找指定的类字节码并加载进内存,并会先加载父类的字节码进内存;
2.在堆内开辟内存空间,分配内存地址;
3.在对象的内存空间中对对象的属性进行默认初始化;
4.调用对应的构造方法初始化;
5.在构造方法中第一行先调用父类的构造方法对父类进行初始化;(如果不显示指定父类构造方法,默认为super());
6. 父类初始化完毕后,再对子类属性进行显式初始化;
7.再进行子类构造方法的特定初始化;
8.初始化完毕后,将对象的引(分配的内存地址)用返回。
class Parent
{
Parent()
{
//super();
show();
}
void show()
{
System.out.println("parent show run");
}
}
class Son extends Parent
{
int num = 8;
Son()
{
/*
即使不显式指定父类的构造方法,这里也会有默认的调用super()
*/
//super();
show();
}
void show()
{
System.out.println("son show run: " + num);
}
public static void main(String[] args)
{
Son s = new Son();
s.show();
}
}
主函数中s的实例化过程为:
1. 先加载Parent.class,然后加载Son.class;
2.new Son()---->开辟内存空间,分配地址;
3. Son类中的num默认初始化, num = 0;
3.Parent(){}被执行;
4.Son类中的num显式初始化,num = 8;
5.Son(){}被执行;
6.完毕后将分配的内存地址返回给s;
7.子类对象初始化完毕。