【发布时间】:2013-02-26 01:41:19
【问题描述】:
我正在研究脆弱的基类问题,发现以下论文很有趣:https://www.research.ibm.com/haifa/info/ple/papers/class.pdf
在这篇论文中,有人认为如果 Java 有一个“密封的”访问修饰符会很棒。不像 C# 中的 'sealed',相当于 Java 的 'final' 关键字。所提出的密封机制将无法将这些密封类扩展到它们的包之外。
但是,我发现的有关 FBC 问题的大部分材料都可以追溯到 90 年代末、00 年代初,所以这让我怀疑“问题”是否不再是主要问题。
我知道 Joshua Bloch 提倡限制性地使用继承,尤其是跨库,而且他似乎是 Java 权威。
我知道如何通过创建一组从具有私有构造函数的类继承的最终内部类来实现寡态,但这似乎有点不合适。
提出的密封基本上类似于使类成为默认/包私有,还是今天Java中实际上存在某种类密封机制?
【问题讨论】:
-
您能否通过一些示例概述您要问的具体内容?这篇论文是大约 10 页的密集散文,按原样详细讨论它可能超出了 SO 的范围。
-
哦,抱歉,我将对其进行编辑并简要说明。
-
一个final类不能扩展,一个default/package私有类不能在包外使用,所以有区别。
-
我想说,IBM 已经从最初的卓越地位下降了很长一段路。在我看来,链接的文档完全是垃圾。你最好忽略它并继续你的学习,就好像你从未读过这篇文章一样。当然——这只是我个人的看法。
-
@OldCurmudgeon:有趣!但是,如果您能解释为什么它是垃圾,那就太好了。我疯狂的业余猜测是,使用这样的关键字不可能使动态类加载有效地工作。
标签: java inheritance polymorphism encapsulation base-class