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

在抽象类的构造函数中使用抽象init()函数

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

在抽象类的构造函数中使用抽象init()函数

请勿从构造函数中调用过多的方法。

引用 有效Java 2nd Edition,条款17:继承的设计和文档,或者禁止它

类必须遵守一些其他限制以允许继承。 构造函数不得 直接或间接 调用可重写的方法
。如果违反此规则,将导致程序失败。超类构造函数在子类构造函数之前运行,因此子类中的重写方法将在子类构造函数运行之前被调用。如果重写方法依赖于子类构造函数执行的任何初始化,则该方法将无法正常工作。

这是一个示例说明:

public class ConstructorCallsOverride {    public static void main(String[] args) {        abstract class base { base() { overrideMe(); } abstract void overrideMe();         }        class Child extends base { final int x; Child(int x) { this.x = x; } @Override void overrideMe() {     System.out.println(x); }        }        new Child(42); // prints "0"    }}

在此,当

base
构造函数调用时
overrideMe
Child
尚未完成对的初始化
final intx
,并且该方法获得了错误的值。这几乎肯定会导致错误和错误。

也可以看看

  • FindBugs-从超类的构造函数调用的未初始化的字段方法读取


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

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

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