コンパイルする必要があると思っていたにもかかわらず、コンパイルされていないものを見つけたときに、別のパッケージからクラスを拡張していました。
異なるパッケージに2つのクラスがあります。パッケージ com.foobar.a:
package com.foobar.a;
public class A {
protected void foo1() {
System.out.println("foo1() was called!");
}
protected static void foo2() {
System.out.println("foo2() was called!");
}
}
そして、パッケージ com.foobar.b では:
package com.foobar.b;
import com.foobar.a.A;
public class B extends A {
public void bar() {
A obj = new A();
obj.foo1(); // This doesn't compile
A.foo2(); // This does compile
}
}
さて、これによると:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.htmlサブクラスは、同じパッケージの外にある場合でも、メソッドにアクセスできるはずです(そして、メソッドは静的であり、機能します)。実際、私は Eclipse でプログラミングを行っており、問題を修正するための提案は「'foo1()' の可視性を保護されたものに変更する」ことですが、既に保護されています。
それで、ここで正確に何が起こっているのですか?オラクルの仕様では、Class、Package、Subclass、World を使用してアクセス レベルを示します。このリストに「インスタンス」を追加する必要があります。追加する場合、ルールはどれになりますか?