我的代码很有用,但我无法理解为什么private
变量在这种情况下工作,在函数equals()
内。
或者只是一个技巧,如果你从同一种对象结构中调用另一个对象,那么private
标识符不算数?
public class TestClass implements Comparable <TestClass> {
private final String name;
public TestClass(String name) {
this.name = name;
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof TestClass) {
return ((TestClass) obj).name.equals(name); //<- how does this work, isn't name private?
} else {
return false;
}
}
@Override
public int compareTo(TestClass test) {
int thisValue = hashCode();
int otherValue = test.hashCode();
if (thisValue < otherValue) {
return -1;
} else if (thisValue > otherValue) {
return 1;
} else {
return 0;
}
}
@Override
public String toString() {
return name;
}
}
答案 0 :(得分:2)
是的,这些修饰符是类定义作用域而不是实例作用域。查看JavaOO tutorials和Java Language Specification:
否则,如果成员或构造函数被声明为private,那么 当且仅当它发生在主体内时才允许访问 顶级类(第7.6节),包含成员或的声明 构造
答案 1 :(得分:1)
“或者它只是一个技巧,如果从同一类型的Object结构中调用另一个Object,那么私有标识符不计算?” - 简单地说,是的。
编辑官方解释:
“使用的第一个(最左侧)修饰符允许您控制其他类可以访问成员字段。目前,只考虑公共和私有。其他访问修饰符将在后面讨论.public modifier-该字段是可以从所有类访问。私人修饰符 - 该字段只能在自己的类中访问。“
(http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html)