子父类中的构造函数
首先了解构造函数
构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。即为对象成员变量赋初始值。
构造函数与类名相同,可重载多个不同的构造函数。如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造方法,这个构造方法不执行任何代码。
构造函数的调用
子父类中的构造函数的特点:
在子类构造对象时,发现,访问子类构造函数时,父类也运行了。
为什么会这样呢?
原因是:在子类的构造函数中第一行有一个默认的隐式语句。super();
子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
为什么子类实例化的时候要访问父类的构造函数呢?
那是因为子类继承了父类,获取了父类中的内容(属性),所以在使用父类内容之前,首先要看父类如何对自己的内容进行初始化的。
所以子类在构造对象时,必须访问父类中的构造函数。为了完成这个必须的动作就在子类的构造函数中加入了super语句。如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用哪个构造函数(通过super的参数)。
注意:super语句必须要定义在子类构造函数的第一行,因为父类的初始化动作必须要先完成。
通过super关键字初始化父类内容时,子类的成员变量并未显示初始化。等supe()父类初始化完毕后,才进行子类的成员变量显示初始化。
一个对象的实例化过程:
Person p = new Person ();
1、JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接父类的情况下Object不算)
2、在堆内存中开辟空间,分配地址
3、并在对象空间中,对对象的属性进行默认初始化
4、调用对应的构造函数进行初始化
5、在构造函数中,第一行会先到父类中的构造函数进行初始化
6、父类初始化完毕后,在对子类的属性进行显示初始化
7、在进行子类构造函数的特定初始化
8、初始化完毕后,将地址赋值给引用变量