まあ、私はJavaプログラミングに非常に慣れていないことを認めなければならず、私の質問に似た質問がたくさんあるので、ここに質問を投稿することを非常にためらっています. 私はそれらの質問を見ましたが、それでも「保護された」修飾子の背後にあるロジックが何であるか理解できません。したがって、ここに自分の質問を投稿する方がよいと思います。
A
これがパッケージ内のクラスですPackOne
package PackOne;
public class A {
protected void protectedMethod() {
System.out.println("A's protectedMethod");
}
}
B
これがパッケージ内のクラスPackTwo
です。ただし、これは class のサブクラスです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.
}
A
クラス内の保護されたメソッドへのテスト 3 の呼び出しのみが渡されるのに、他の 3 つのテスト (1,2,4) でエラーが発生する理由を説明してください。