繁体   English   中英

Java为什么允许构造函数调用抽象方法和非最终方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM