可能重复:
Why does this() and super() have to be the first statement in a constructor?
我刚刚在学校学到了,但老师不知道为什么。
我可以想出一些很好的理由,但是我认为有些情况可以在构造函数中稍后进行初始化 - 例如,在使用母类的变量之前。好的,变量应该从头开始初始化,但并不总是必要的。
我猜测有更多理由说明为什么必须将super()放在构造函数的第一行。
那么,当我继承一个类时,为什么我必须在构造函数的第一行写super()?
答案 0 :(得分:5)
在您开始自己的课程之前,您继承的课程需要能够完成其构建。
如果不这样做,你可以做很多"坏"事情,例如。
this
传递给其他地方的另一个方法,该方法在构造函数运行之前使用基类。这将打破许多假设调用尚未设置的多态函数""设置"没错。除了类本身所做的任何事情之外,实现也可能使用构造函数调用来处理实现内部。
在它被构造之前访问一个对象是不好的,就像炸鸡一样#34; -a"鸡肉你真的不想在鸡肉被油炸之前吃掉(吃掉)。
基类尝试承诺的基类的protected
/ public
成员变量将始终初始化为某个状态。
一个类承诺任何实例总是处于某个给定状态是完全合理的。如果你有机会在构造函数被调用之前做某事,那么就没有办法兑现这样的承诺。基本上"是-a"如果关系是""那么关系实际上并不成立。实际上还不是那件事!
答案 1 :(得分:1)
除了awoodlands之外回答:你不必编写super(),因为Java-Compiler会自动调用层次结构中的所有默认构造函数。
异常:如果基类中没有默认构造函数,则必须使用super(ConstructorArgs args)
调用自定义构造函数。