![](/img/trans.png)
[英]Why non-final public methods of Object declared in Annotation interface?
[英]Why does Java allow a constructor to invoke abstract and non-final methods?
Java允许非最终类的构造函数调用任何实例方法,即使这些方法是抽象或非最终方法也是如此。
这被认为是不好的做法(例如,参见有效Java 2nd Edition,第17项),由于定义的构造函数顺序,在C ++中是不可能的。
我的问题是为什么从Java语言的设计开始就允许这样做? 似乎可以禁止它作为语言限制。 在某些情况下有必要这样做吗?
Java语言之所以允许它,是因为没有(没有)明确的理由禁止它,特别是如果您认为在最初设计该语言时并不一定知道当今的Java最佳实践。
请注意,调用抽象或非最终方法的构造函数确实起作用,因为子类可以覆盖该方法,并且因为该构造函数可能正在子类的新创建实例上执行(由于构造函数从子类到超类的执行顺序) )。
据我所知,没有必要这样做。 但是,即使已知这是一种不好的做法,也肯定有一些第三方库可以做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.