子类构造器一定会调用父类构造器。
先父类、后子类!
当new子类对象时(省去了加载):
所有属性(父类和子类)都赋值为默认值
父类的构造代码块和父类的显示初始化语句
父类构造器的代码
子类的构造代码块和子类的显示初始化语句
子类的构造器代码。
当加载子类时:
所有静态属性(子类和父类)都赋值为默认值
执行父类的静态块和静态显示初始化语句
执行子类的静态块和静态显示初始化语句
1 父类子对象
每个子类对象都有一个父类对象,这个父类对象帮助子类完成父类所有的功能!
2 super关键字(在子类中访问父类成员的通道)
super.方法,直接去找父类中的。
this.方法,先在子类中找,找不到再去父类中去找。
3 初始化父类子对象
子类构造器,无论如何都会去调用父类构造器。
4 隐式和显示调用父类构造器
什么时候隐式调用父类构造器
没有使用this调用语句,也没有使用super调用语句,那么就隐式调用父类的无参构造器。
如果使用了this调用语句,就不会隐式调用父类构造器,也不能再加super调用语句。
如果加了super调用语句,那么就是显式调用父类构造器,而不是隐式调用了。这时也不能再加this调用语句了。
5 什么时候必须使用super
当引用父类属性和父类方法时,而子类中有同名属性或相同方法时,那么就一样要使用super。
super调用语句!
6 什么时候可以使用super
super调用语句。
引用父类的方法和属性时。
父类中private的东西,是子类使用不了的。
override是用来重写父类中的方法以及重写本类和object的toString()方法。
不能重写Overriding,但可以被重载Overloading。 |