-------------------------------------------------------------------------------------------
出现的编译错误:
Implicit super constructor Some() is undefined. Must explicitly invoke another
constructor
意思:隐式的超级构造函数some()是未定义的。必须显式地调用另一个构造函数
--------------------------------------------------------------------------------------------
在子类的构造方法中:
规则:(this(),super()指的是子类与父类的构造方法,非子类的对象this和父类的对象super)
1. this()语句或super()语句只能出现第一条语句
2. 只能有一个this()语句或super()语句,不能2个共存(否则就有2个第一条语句了)[可以有任意个this 和super]
3. 第一条语句没有super(),也没this(),那么系统将会默认调用父类的无参方法
4. 第一条语句是super()调用父类的有参构造方法,那么直接调用父类的有参构造方法,而不会执行父类的 无参方法
5. 第一条语句是this()调用自身的其他构造方法,那么不会再调用父类的任何构造方法
6. 如果存在多级继承关系,创建子类对象时,以上规则会多次向更高一级应用,一直执行到顶级父类 Object类的无参构造方法为止,比如Object-World-People-Student,创建Student对象时,会自动判断 构造方法的第一条语句是符合以上哪条规则,然后调用相应的父类People构造方法,被调用People构造方法中第一条语句规则,然后再调用相应的World类的构造方法,被调用World的构造方法调用 Object的无参方法,最后结束
注:
1.以上规则只对构造方法有用,对成员方法完全没用(因为成员方法无法调用构造方法)
2.因为创建子类时,有可能调用父类的无参构造方法,如果父类中有自己定义的有参构造方法,系统不会 再给它无参构造方法,要自己定义无参构造方法,否则子类会读取不到父类的无参构造方法而会编译错误
3.子类无法继承父类的构造方法,只能通过super()调用父类的构造方法