栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

基类构造函数在Java中调用重写方法时派生类对象的状态

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基类构造函数在Java中调用重写方法时派生类对象的状态

  • Derived
    对象 被创建-它只是在构造函数尚未运行。对象的类型在创建后即刻就不会在Java中更改,这发生在所有构造函数运行之前。

  • var
    在运行构造函数之前,在创建对象的过程中,将默认值指定为0。基本上,类型引用被设置,表示对象的其余内存被擦除为零(从概念上讲,无论如何,作为垃圾回收的一部分,它可能已经被擦除为零)。

  • 这种行为至少会导致一致性,但可能会很痛苦。在一致性方面,假设您有一个可变基类的只读子类。基类可能具有

    isMutable()
    有效地默认为true 的属性-但子类覆盖了它,始终返回false。在子类构造函数运行之前,对象是可变的,但是之后是不可变的,这是很奇怪的。另一方面,当您在某个类的构造函数运行之前最终在一个类中运行代码的情况下,这 绝对是 很奇怪的:(

一些准则:

  • 尽量不要在构造函数中做很多工作。避免这种情况的一种方法是在静态方法中进行工作,然后使静态方法的最后一部分成为仅设置字段的构造函数调用。当然,这意味着您在进行工作时不会获得多态的好处-​​但是在构造函数调用中这样做还是很危险的。

  • 尽量避免在构造函数期间调用非最终方法-这很可能引起混乱。记录所有方法调用你真的 必须 做出 非常 清楚,让任何人都重写他们知道,初始化完成之前,他们将被调用。

  • 如果必须在构造期间调用方法,则 通常 不适合事后再调用它。如果是这种情况,请记录下来并尝试在名称中指出。

  • 首先,尽量不要过度使用继承-仅当您有一个继承自Object以外的超类的子类时,这才成为问题:)继承的设计很棘手。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号