返回介绍

6.6 继承和初始化

发布于 2025-02-20 00:17:09 字数 406 浏览 0 评论 0 收藏 0

之前已经讨论过,通过引入称为初始器的特殊方法,来 初始化 对象。一旦对象被创建,在被返回给创建者之前,需要调用它的初始器。

现在有了继承,这个过程变复杂了一点,因为如果初始器能相互覆盖,可能会忽略一些必要的初始化工作。初始器的工作可能非常具体,我们希望避免子类必须处理所有的细节。可以假定其语义和一般方法的语义一样,那么子类中的 initialize 可以根据需要调用超类的初始器。这种自由导致的问题是,在继承的字段还没有一致地初始化时,子类中的初始器就可能开始处理对象了。为了避免这个问题,在 Java 中,构造函数做的第一件事必须是调用超类的构造函数(它可以先计算此调用的参数,仅此而已)。即使不在源代码中明确写出,编译器也会添加这个调用。事实上,在 VM(虚拟机)层面字节码验证器也会检验这一点:因此,底层的节码操作也无法绕开对超类构造函数的调用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文