Ну, я должен признать, что я очень плохо знаком с программированием на Java и очень стесняюсь опубликовать вопрос здесь, потому что есть много вопросов, похожих на мой вопрос. Я рассматривал эти вопросы, но все же я не могу понять, в чем логика «защищенного» модификатора. Поэтому я думаю, что лучше задать свой вопрос здесь.
Вот класс A
в упаковке PackOne
package PackOne;
public class A {
protected void protectedMethod() {
System.out.println("A's protectedMethod");
}
}
Вот класс B
в упаковке PackTwo
. Однако это подкласс класса A
.
package PackTwo;
import PackOne.A;
public class B extends A {
public static void main(String[] args) {
//Test 1
protectedMethod(); //error: non-static method protectedMethod()
// cannot be referenced from a static context.
//Test 2
A instanceofA = new A();
instanceofA.protectedMethod();//error: protectedMethod()
//has protected access in PackOne.A
}
public void anotherMethodOfB() {
//Test 3
protectedMethod();//Pass
}
//Test 4
A instanceofA = new A();
instanceofA.protectedMethod();//error: package instanceofA does not existed.
}
Пожалуйста, объясните, почему только вызов Test 3 в защищенном методе в классе A
пройден, а остальные 3 теста (1,2,4) дают ошибки?