我剛剛遇到了一個代碼。在一種情況下,我無法使用它的實例訪問該類的私有成員(這很好),但在其他情況下,我可以以不同的實例訪問私有成員(屬於同一個類)。任何人都可以請解釋我爲什麼發生?從同一類的不同實例訪問私有方法
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實現的。 (無可否認,在這方面保護起來有點棘手。) –