ExtendsprotectedClass该类中的代码被允许
ProtectedClass通过type的引用访问受保护的成员
ExtendsprotectedClass。从JLS第6.6.2节中:
可以从包的外部访问对象的受保护成员或构造函数,而在包中只能通过负责该对象实现的代码声明该对象。
和
令C为声明受保护成员m的类。仅在C的子类S的主体内允许访问。此外,如果Id表示实例字段或实例方法,则:
- 如果通过限定名称Q.Id(其中Q是expressionName)进行访问,则且仅当表达式Q的类型为S或S的子类时,才允许访问。[…]
UsesExtendedClass对的实现不负责
ExtendsprotectedClass,因此最终调用失败。
编辑:这背后的原因是
protected访问旨在帮助子类实现其所需的功能,从而比通常提供更多的对超类内部的访问。如果 所有
代码都可以使用,那将很接近将方法公开。基本上,可以信任子类不破坏封装;可以使用子类。它们在自己类型的对象中具有更多功能。公用API不应公开那些细节,但是受保护的API可以仅为给子类提供更多机会的目的。



