继承关系的对象创建过程

有了继承关系后,对象创建过程会变得复杂一点,由于子类对象中包含一个父类的对象(虽然,父类对象有的属性不能访问,例如用 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版权协议,转载请附上原文出处链接和本声明。