6.6.2 Details on protected Access
A protected member or constructor of an object may be accessed from outside
the package in which it is declared only by code that is responsible for the implementation
of that object.
6.6.2.1 Access to a protected Member
Let C be the class in which a protected member m is declared. Access is permitted
only within the body of a subclass S of C. In addition, if Id denotes an
instance field or instance method, then:
• If the access is by a qualified name Q.Id, where Q is an ExpressionName,
then the access is permitted if and only if the type of the expression Q is S or a
subclass of S.
• If the access is by a field access expression E.Id, where E is a Primary
expression, or by a method invocation expression E.Id(. . .), where E is a
Primary expression, then the access is permitted if and only if the type of E is
S or a subclass of S.
6.6.2.2 Qualified Access to a protected Constructor
Let C be the class in which a protected constructor is declared and let S be the
innermost class in whose declaration the use of the protected constructor
occurs. Then:
• If the access is by a superclass constructor invocation super(. . .) or by a
qualified superclass constructor invocation of the form E.super(. . .), where
E is a Primary expression, then the access is permitted.
• If the a