java: Why must I write super() in the first line of the constructor
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Why does this() and super() have to be the first statement in a constructor?
我刚在学校学的,但老师不知道为什么。
我可以考虑一些很好的理由,但我认为有些情况下可以在稍后的构造函数中完成初始化——例如,在使用来自母亲类的变量之前。好的,变量应该从一开始就初始化,但这并不总是必要的。
我想还有更多的原因可以解释为什么必须将super()放在构造函数的第一行。
所以,当我继承一个类时,为什么必须在构造函数的第一行中编写super()?
在您开始使用自己的类之前,您从中继承的类需要能够完成其构造。
如果不这样做,你可以做很多"坏"的事情,例如
调用尚未正确"设置"的多态函数。除了类本身所做的任何事情之外,实现也可能使用构造函数调用来处理实现内部。
在构建一个对象之前访问它是不好的,就像油炸鸡一样——一个你真的不想在油炸之前访问(吃)那个鸡的鸡。
访问基类试图承诺的基类的
对于一个类来说,承诺它的任何实例都将始终处于某个给定状态是完全合理的。如果你有机会在构造函数被调用之前做一些事情,那么就没有办法兑现这样的承诺。本质上,如果"是"的事情还不是真的那样的话,"是"的关系就不会维持下去了!
除了Advand回答:你不必写Sub(),因为Java编译器会自动调用层次结构中的所有默认构造函数。
例外:如果在基类中没有默认的构造函数,则必须使用