有了继承关系后,对象创建过程会变得复杂一点,由于子类对象中包含一个父类的对象(虽然,父类对象有的属性不能访问,例如用 private修饰的属性,但是还会创建一个完整的父类对象),因此,创建子类对象,必须先创建父类对象。
所以有了继承关系之后,对象创建过程如下:
1.分配空间,将子类对象包含的父类对象所需的空间统一在此分配,并且初始化父类和子类的属性默认值(基本类型为 0,引用类型为 null,布尔类型为false)
2.创建父类对象,先初始化父类属性,在调用父类构造,(注,如果父类还有继承关系,即还有父类的情况 ,开始递归构造父类,即从继承最顶端开始)
3.初始化子类属性
4.初始化子类构造方法
看下面具体的例子来介绍一下
public class A {
private int valueA = 50;
public A(){
valueA = 100;
}
}public class B extends A{
private int valueB = 150;
public B(){
valueB = 200;
}
}public class C extends B{
private int valueC = 250;
public C(){
valueC = 300;
}
public static void main(String[] args) {
C c = new C();
}
}当我们运行main方法起java程序的时候,1.遇到new 关键字,在JVM的堆区域分配空间,将子类,父类所需的空间统一分配,并且初始化属性赋予默认值,这个时候JVM的内存是这样分配的
2.初始化 A的属性,将valueA的值修改为 50;
3.调用A 的构造 , 将valueA的值修改为100
4.初始化 B的属性,将valueB的值修改为150
5.调用B 的构造 ,将valueB的值修改为200
6.初始化C 的属性,将valueC的值修改为250
7.调用C 的构造,将valueC的属性修改为300
版权声明:本文为xu511739113原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。