super()
调用父类的无参构造函数,当在子类构造函数中调用时必须放在第一行,原因如下:
1.编译器检测子类构造函数第一行没有显示调用父类构造函数时,默认加上一句super(),而如果此时你恰好在第二行(只要不是第一行)调用了super,此时你对父类进行了两次初始化,先不说一个实例能否被初始化两次,多次初始化已经造成了资源的浪费。假如这是三级继承关系,而第二层的无参构造函数也调用了两次super,这时第一层的父类就会被调用四次,以此类推多级继承该有多浪费资源。
2.子类的构造函数可能会使用到父类的属性,如果父类不在第一行初始化,子类可能会调用出错。
this()
调用本类的其他构造函数
原因与super类似,没有第二点
super与this无法同时存在
this构造函数中,无论显示隐示,肯定会调用父类的构造方法,当super与this同时存在时父类构造方法就必定被调用了至少两次。
网友评论