根据JLS关于protected访问的详细信息:
- 类C中声明的protected成员只允许在其子类S中使用。
- 如果Id表示实例字段或实例方法,则:
- 如果访问是由限定名称Q.Id完成的,其中Q是ExpressionName,则当表达式Q的类型为S或S的子类时,访问才被允许。
- 如果访问是通过字段访问表达式E.Id完成的,其中E是一种Primary expression,或者是通过方法调用表达式E.Id(...)完成的,其中E是一种Primary expression,则仅当E的类型为S或S的子类时,访问才被允许。