Ale*_*rov 0 java inheritance class
我刚在学校学到了,但老师不知道为什么.
我可以想出一些很好的理由,但是我认为有些情况下可以在构造函数中稍后进行初始化 - 例如,在使用母类的变量之前.好的,变量应该从一开始就被初始化,但这并不总是必要的.
我猜是有更多的理由说明为什么必须将super()放在构造函数的第一行.
那么,为什么我必须在构造函数的第一行编写super(),当我继承一个类时?
您继承的课程需要能够在您开始自己的课程之前完成其构建.
如果不这样做,你可以做很多"坏事",例如
this,传递给使用基类的其他地方的另一个方法.这会打破很多假设调用尚未正确"设置"的多态函数.除了类本身所做的任何事情之外,实现也可能使用构造函数调用来处理实现内部.
在物体构建之前进入物体是不好的,就像炸鸡"是一只鸡"一样,你真的不想在炸鸡之前吃掉它(吃).
基类尝试承诺的基类的访问protected/ public成员变量将始终初始化为某个状态.
对于一个类来说,承诺它的任何实例总是处于某个给定的状态是完全合理的.如果你有机会在构造函数被调用之前做事,那么就没有办法兑现这样的承诺了.基本上"is-a"关系实际上不会成立,如果它"是"的东西实际上还不是那个东西!