super关键词
我们知道在java中可以通过super关键词调用父类非私有的属性或者方法,而在子类构造器中调用父类构造器的时候必须放在第一行,这是为什呢?
我们看正常写法:
public class SuperTest { public static void main(String[] args) { Son son = new Son(); }}class Father{ public Father(){ String name = "老王"; }}class Son extends Father { public Son(){ super(); String name = "小宝"; }}
为什么?
super调用父类构造器必须放在子类构造器第一行,是因为如果放在后边,那么子类的继承覆盖就会失效,我们在使用子类的时候,在子类构造的时候为了满足子类的特殊行为进行定制,并通过语句执行表达,如果此时子类构造执行定制语句完毕又调用了父类的构造,那么父类的执行语句就会覆盖子类的行为,例如:
class Father{ public Father(){ String name = "老王"; }}class Son extends Father { public Son(){ String name = "小宝"; //这里编译通不过,即便能通过,这样的行为会将子类的name赋值行为覆盖 super(); }}