1,子类的实例化函数
1,子父类中的构造函数的特色。this
在子类构造对象时,发现,访问子类构造函数时,父类也运行了。
为何呢?
缘由是:在子类的构造函数中第一行有一个默认的隐式语句。 super();
子类的实例化过程:子类中全部的构造函数默认都会访问父类中的空参数的构造函数。
为何子类实例化的时候要访问父类中的构造函数呢?
那是由于子类继承了父类,获取到了父类中内容(属性),因此在使用父类内容以前,
要先看父类是如何对本身的内容进行初始化的。
因此子类在构造对象时,必须访问父类中的构造函数。
为何完成这个必须的动做,就在子类的构造函数中加入了super()语句。
若是父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用
父类中哪一个构造函数。同时子类构造函数中若是使用this调用了本类构造函数时,
那么super就没有了,由于super和this都只能定义第一行。因此只能有一个。
可是能够保证的是,子类中确定会有其余的构造函数访问父类的构造函数。
注意:supre语句必需要定义在子类构造函数的第一行。由于父类的初始化动做要先完成。spa
1,子类构造时会经过super()方法先构造父类(子类的全部构造函数都会访问父类中空参数的构造函数,若是父类中没有空参构造函数,在子类重要添加super()在 子类 的构造第一行)。对象
2,构造函数不存在继承和覆盖blog
2,一个对象实例化过程:
Person p = new Person();
1,JVM会读取指定的路径下的Person.class文件,并加载进内存,
并会先加载Person的父类(若是有直接的父类的状况下).
2,在堆内存中的开辟空间,分配地址。
3,并在对象空间中,对对象中的属性进行默认初始化。
4,调用对应的构造函数进行初始化。
5,在构造函数中,第一行会先到调用父类中构造函数进行初始化。
6,父类初始化完毕后,在对子类的属性进行显示初始化。
7,在进行子类构造函数的特定初始化。
8,初始化完毕后,将地址值赋值给引用变量.继承
2,代码块初始化过程内存