Следующий код работает и работает отлично.
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 должен иметь доступ ко всем членам экземпляра [будь то частные, защищенные и т. д.] при доступе через ссылку на объект, поскольку разработчик очень хорошо знает, что он делает, в отличие от любой третьей стороны. Вот почему здесь не используется модель объектно-ориентированной модели.
Может ли кто-нибудь предложить лучшее объяснение того, почему здесь разрешен код c1.real?