大家有人可以解释为什么这段代码的最后一行是合法的:
public class HashCodeTest {
private String value = null;
HashCodeTest(String value) {
this.value = value;
}
public static void main(String[] args) {
Map<HashCodeTest, String> aMap = new HashMap<HashCodeTest, String>();
aMap.put(new HashCodeTest("test"), "test");
aMap.put(new HashCodeTest("test"), "test");
System.out.println(aMap.size());
}
@Override
public int hashCode() {
int result = 17;
return 31 * result + value.hashCode();
}
public boolean equals(HashCodeTest test) {
if (this == test) {
return true;
}
if (!(test instanceof HashCodeTest)) {
return false;
}
return test.value.equals(value);
}
}
在最后一行可以访问测试类的私有字段,但这是非法的。
谢谢, 马克西姆
答案 0 :(得分:4)
此类的所有实例都可以访问私有字段。
答案 1 :(得分:4)
因为它是您正在使用它的同一个类的实例。
答案 2 :(得分:4)
value
不是另一个类的私有变量;它是同一个类的另一个实例的私有变量。因此,访问是完全合法的。
答案 3 :(得分:0)
访问修饰符定义类型的访问权限,而不是类型的实例。