最善かつ最も役立つ回答は、質問の文脈によって異なります。
質問がプライベートの意図された意味についての初心者の質問である場合、答え「いいえ」は完全に適切です. あれは:
- A のプライベート メンバーは、クラス A 内でのみアクセスできます
- A のパッケージ プライベート メンバーは、A のパッケージ内のクラス内でのみアクセス可能です。
- A の保護されたメンバーは、A のパッケージ内のクラスおよび A のサブクラス内でのみアクセス可能です。
- A のパブリック メンバーは、A が表示されている場所ならどこからでもアクセスできます。
さて、もし、これは一筋縄ではいかないかもしれませんが (ブライアンに感謝します :))、その質問は、「プライベートはプライベートを意味することは知っていますが、言語の抜け穴はありますか?」という質問を見ている、より「高度な」コンテキストから来ている」 では、まあ、そのような抜け穴があります。こんなふうになります:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
class C {
private int x = 10;
private void hello() {System.out.println("Well hello there");}
}
public class PrivateAccessDemo {
public static void main(String[] args) throws Exception {
C c = new C();
List<Field> fields = Arrays.asList(C.class.getDeclaredFields());
for (Field f: fields) {
f.setAccessible(true);
System.out.println(f.getName() + " = " + f.get(c));
}
List<Method> methods = Arrays.asList(C.class.getDeclaredMethods());
for (Method m: methods) {
m.setAccessible(true);
m.invoke(c);
}
}
}
出力:
x = 10
Well hello there
もちろん、これは実際にはアプリケーション プログラマーが行うことではありません。しかし、そのようなことができるという事実は知っておく価値があり、無視すべきものではありません。とにかく私見。