文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.6 继承和初始化
之前已经讨论过,通过引入称为初始器的特殊方法,来 初始化 对象。一旦对象被创建,在被返回给创建者之前,需要调用它的初始器。
现在有了继承,这个过程变复杂了一点,因为如果初始器能相互覆盖,可能会忽略一些必要的初始化工作。初始器的工作可能非常具体,我们希望避免子类必须处理所有的细节。可以假定其语义和一般方法的语义一样,那么子类中的 initialize
可以根据需要调用超类的初始器。这种自由导致的问题是,在继承的字段还没有一致地初始化时,子类中的初始器就可能开始处理对象了。为了避免这个问题,在 Java 中,构造函数做的第一件事必须是调用超类的构造函数(它可以先计算此调用的参数,仅此而已)。即使不在源代码中明确写出,编译器也会添加这个调用。事实上,在 VM(虚拟机)层面字节码验证器也会检验这一点:因此,底层的节码操作也无法绕开对超类构造函数的调用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论