次のコードは完全に機能し、実行されます。
public class Complex {
private int real, imag;
Complex(int r, int i) {
real = r;
imag = i;
}
public static Complex add(Complex c1, Complex c2) {
return new Complex(c1.real + c2.real, c1.imag + c2.imag);
}
public String toString() {
return real + "+i" + imag;
}
public static void main(String[] args) {
Integer.parseInt("5");
System.out.println(Complex.add(new Complex(2, 3), new Complex(3, 4)));
}
}
現在、オブジェクト指向の設計モデルによれば、プライベートインスタンスメンバーはオブジェクト参照を介してアクセスされるべきではありません(これはここではc1.realによって行われています)。
したがって、その意味では、コンパイラエラーがあるはずです。しかし、それは反対しません。
今私の理解によれば、それは許可されています
c1.realコードは、プライベートクラスComplexクラス自体の本体に記述されています。
Complexクラスの開発者は、オブジェクト参照を介してアクセスするときに、すべてのインスタンスメンバーにアクセスできる必要があります。これは、開発者がサードパーティとは異なり、自分が何をしているかをよく知っているためです。そのため、ここではオブジェクト指向モデルモデルを採用していません。
c1.realコードがここで許可されている理由について誰かがより良い説明を提案できますか?