以下代码可以完美运行。
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 代码吗?