为什么说Java中要慎重使用继承(2)

因为超类的构造函数会在子类的构造函数之前先运行,这里超类的构造函数对someMethod()有依赖,同时someMethod()被重写,所以超类的构造函数里调用到的将是Son.someMethod(),而这时候子类还没被初始化,于是在运行到date.getTime()时便抛出了空指针异常。

因此,如果在超类的构造函数里对可覆盖的方法有依赖,那么在继承时就可能会出错。

结论

慎重使用继承,复合优先于继承。

使用继承时重写超类中存在自用性的可覆盖方法可能会出错,即使不进行重写,超类更新时也可能会引入错误。

如果使用继承和复合皆可,那么优先使用复合,上述关于继承的缺点都可以用复合来避免。

如果要使用继承,那么应该精心设计超类,并提供详细文档。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/52489467515a1f3ed8c3200846fbf5e4.html