看java源码时,不理解。value是String类的private属性,所以在本类中可以直接访问 value属性,
但是 anotherString.value,实例对象怎么也可以访问private属性,经过研究还是private访问修饰符理解不到位,在本类中,实例也可以访问本类的private属性
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
...
...
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
}
举例验证
可以看到在A类中有 private a 属性,且在A类的test方法中,A的实例对象可以访问到 private a 属性
public class Test {
static void main(String[] args) {
A a1 = new A();
B b1 = new A();
a1.test(b1); // 3
}
}
class B {
}
class A extends B {
private String[] a = {
"H", "E", "L"};
public void test(B b) {
A a = (A)b;
System.out.println(a.a.length);
}
}