Comparable Class equals函数适用于私有变量?

时间:2014-02-15 20:30:05

标签: java equals private comparable

我的代码很有用,但我无法理解为什么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;
    }
}

2 个答案:

答案 0 :(得分:2)

是的,这些修饰符是类定义作用域而不是实例作用域。查看JavaOO tutorialsJava Language Specification

  

否则,如果成员或构造函数被声明为private,那么   当且仅当它发生在主体内时才允许访问   顶级类(第7.6节),包含成员或的声明   构造

答案 1 :(得分:1)

“或者它只是一个技巧,如果从同一类型的Object结构中调用另一个Object,那么私有标识符不计算?” - 简单地说,是的。

编辑官方解释:

“使用的第一个(最左侧)修饰符允许您控制其他类可以访问成员字段。目前,只考虑公共和私有。其他访问修饰符将在后面讨论.public modifier-该字段是可以从所有类访问。私人修饰符 - 该字段只能在自己的类中访问。“

http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html