私はちょうどコードを発見しました。そのインスタンスを使ってクラスのプライベートメンバーにアクセスすることはできませんが(それは問題ありません)別のインスタンス(同じクラスに属します)を持つプライベートメンバーにアクセスします。誰も私に理由を説明してもらえますか?同じクラスの別のインスタンスからプライベートメソッドにアクセスする
class Complex {
private double re, im;
public String toString() {
return "(" + re + " + " + im + "i)";
}
Complex(){}
/*Below c is different instance, still it can access re,im(has a private access)
without any error.why? */
Complex(Complex c) {
re = c.re;
im = c.im;
}
}
public class Main {
public static void main(String[] args) {
Complex c1 = new Complex();
Complex c2 = new Complex(c1);
System.out.println(c1.re); /* But getting an error here ,
which is expected as re and im has a private access in Complex class.*/
}
}
これはJavaの仕組みだからですか?それ以外の場合、メンバまたはコンストラクタはprivateと宣言され、メンバまたはコンストラクタの宣言を囲むトップレベルクラス(7.6)の本体内で発生する場合にのみアクセスが許可されます。 (JLS 6.6.1)アクセス制御は、Javaではインスタンスではなくクラスによって行われます。 (保護されている点では、この点ではやや厄介です。) –