【发布时间】:2011-04-09 08:14:45
【问题描述】:
为什么最终类中允许受保护的成员?
这不应该是编译时错误吗?
编辑:正如人们所指出的,您可以通过使用 default 修饰符来获得相同的包访问权限。它应该以完全相同的方式表现,因为 protected 只是 default + 子类,而 final 修饰符明确拒绝子类化,所以我认为答案不仅仅是提供相同的包访问。
【问题讨论】:
-
问题的一个变体仍然有效:为什么我们可以拥有私有静态最终方法? “私有”意味着“最终”以及“静态”,对吗?是不是多余的?
-
@gawi:我不知道如何解释你的评论,但
private肯定不暗示static/final。 -
@gawi:私有意味着非虚拟,不是静态的,说“私有意味着最终”是没有意义的,因为“最终”只对继承的方法有意义。我同意,因为我找不到在私有方法声明中使用“final”的正当理由。
-
抽象类中也可以有公共构造函数,这是一种常用的模式。仅仅因为它不是很有用,并不会使其成为错误。
-
在方法上,“静态”与最终/非最终方面不兼容,因为无法覆盖静态方法。在基类 B 中拥有最终静态方法 x() 不会阻止派生类 D 拥有自己的 x() 方法。静态方法的 final 关键字没有任何意义。