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