インスタンス化されたオブジェクトのプライベートメソッドを呼び出すことはできません。なぜ私は以下のコードが動作するのだろうか?私はプライベートメソッドを呼び出すことができますか?
public class SimpleApp2 {
/**
* @param args
*/
private int var1;
public static void main(String[] args) {
SimpleApp2 s = new SimpleApp2();
s.method1(); // interesting?!
}
private void method1() {
System.out.println("this is method1");
this.method2(); // this is ok
SimpleApp2 s2 = new SimpleApp2();
s2.method2(); // interesting?!
System.out.println(s2.var1); // interesting?!
}
private void method2() {
this.var1 = 10;
System.out.println("this is method2");
}
}
私はクラス内からプライベートメソッドにアクセスできることを理解しています。しかし、クラス内のメソッドがその同じクラスのオブジェクトをインスタンス化する場合、そのインスタンス化されたオブジェクトにスコープ規則を適用すべきではないでしょうか?
mainのような静的メソッドは、この例のようにクラスの非静的メンバーにアクセスできますか?
このstackflow質問は役立つかもしれない:[Javaでは、公共、デフォルト、保護、およびプライベートの違いは何ですか?] [1] [1]:http://stackoverflow.com/questions/ 215497/in-java-whats-the-difference-between-public-default-protectedとprivateの違い – zengr