为什么在最终的java类中允许受保护的成员?

Tom*_*sky 16 java oop

为什么在最终课程中允许受保护的成员?

这不应该是编译时错误吗?

编辑:正如人们所指出的,您可以使用默认修饰符来获得相同的包访问权限.它应该以完全相同的方式运行,因为protected只是默认的+子类,而final修饰符明确拒绝子类化,所以我认为答案不仅仅是提供相同的包访问.

Tom*_*ine 17

protected改性剂是在该覆盖方法需要protected从基类的方法,在不暴露这些成员的public.

一般来说,你可能会引入许多不必要的规则来取缔不可信的组合(例如protected static),但它没有多大帮助.你不能禁止愚蠢.


ska*_*man 15

因为受保护的成员可以被同一个包中的其他类以及子类访问.

  • 当然,如果是这种情况,您可以使用默认(包)访问获得相同的结果,因此它仍然可能是编译错误.我认为这只是他们应该将子类可见性和包/内部类可见性保持为完全独立的概念的更多证据.他们是谁告诉我,如果子类具有可见性,那么包也必须? (6认同)

Aff*_*ffe 9

protected修饰符还允许在同一个包中进行访问,而不仅仅是子类.所以在最后一堂课上并没有完全没有意义.


Boz*_*zho 6

这里说的参数protected可以通过同一个包的类访问成员是有效的,但在这种情况下protected变得等于默认的可见性(包私有),问题仍然存在 - 为什么两者都允许.

我猜两件事:

  • 没有必要禁止它
  • 可以final临时制作课程,直到作出设计决定.每次添加或删除时,都不应该更改所有可见性修饰符final

  • +1:然而,我很惊讶"不正确"的答案得到了多快.它是否讲述了一般知识? (2认同)