У меня также сложилось впечатление, что protected
означает «доступный из того же пакета или из подкласса», но Спецификация языка Java , конечно, более точна и объясняет, что в подклассе S из C , «Если доступ осуществляется по полному имени Q.Id, где Q - ExpressionName, тогда доступ разрешается тогда и только тогда, когда тип выражения Q - S или подкласс S».
Таким образом, вы можете получить доступ к protected
методу суперкласса только через ссылку на подкласс, из которого вы звоните, например:
public class C2 extends C1 {
private C2 c2_other_instance;
public void doItAgain() {
c2_other_instance.doIt();
}
}
Если вы объясните, почему вы хотите получить доступ к одному экземпляру суперкласса из другого экземпляра подкласса, тогда кто-то может предложить лучший дизайн. В противном случае вам придется создать метод public
или поместить классы в один пакет.