为什么Java的"受保护"受保护的程度低于默认值?

wch*_*gin 4 java terminology access-specifier semantics

在Java中,我们有四个访问说明:public,protected,包私有的(默认),和private.这是 ,而不是我的问题.

我的问题是关于命名protected.如下所示,给一个字段package-private的默认访问说明符可以防止包外的子类使用它,但是应用关键字protected实际上并不保护它 - 相反,它将它打开到子类任何包裹.

那么,为什么不protected保护东西; 为什么它比没有修饰符的限制更少

rua*_*akh 6

如果我们接受那些应该存在的四个访问级别(private,package-private,package-private-plus-subclasses和public),并且我们接受package-private应该是默认访问级别指定别的东西,然后这个问题变成:"为什么要调用package-private-plus-subclasses protected?" 答案就是它从C++中借用/继承了这个术语(它没有"包"的概念,但protected用来表示"私有加子类").

(我将这个答案作为社区维基发布,以鼓励其他人加入它,因为我猜这个故事不仅仅是这个.还有,因为有人可能想补充一些理由,为什么这些是四个访问应该存在的级别 - 例如,为什么我们有package-private-plus-subclasses但没有private-plus-subclasses-以及为什么package-private应该是默认值.)


Rob*_*ker 2

受保护的限制比公开的更严格。这就是为什么它被称为它的本质。

我希望语言设计者将默认访问说明符命名为“package-protected”,因为默认值对很多程序员来说非常令人困惑。我更倾向于将 protected 作为默认值,或者根本没有默认值。