Функция Comparable Class equals работает с частной переменной?

Что ж, мой код работает, но я просто не могу понять, почему переменная 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;
    }
}

person SSpoke    schedule 15.02.2014    source источник


Ответы (2)


Да, эти модификаторы относятся к области определения класса, а не к области действия экземпляра. Ознакомьтесь с руководствами по JavaOO и Спецификация языка Java:

В противном случае, если член или конструктор объявлен закрытым, то доступ разрешается тогда и только тогда, когда он происходит в теле класса верхнего уровня (§7.6), которое заключает в себе объявление члена или конструктора.

person gertas    schedule 15.02.2014
comment
Это предназначено не для безопасности, а для объектно-ориентированной инкапсуляции en.wikipedia.org/wiki/ - person gertas; 16.02.2014

«Или это просто уловка, если вы вызываете другой объект из той же структуры объекта, тогда частный идентификатор не учитывается?» - просто, да.

ИЗМЕНИТЬ Официальное объяснение:

«Первый (самый левый) используемый модификатор позволяет вам контролировать, какие другие классы имеют доступ к полю-члену. На данный момент рассмотрим только общедоступные и частные модификаторы доступа. Другие модификаторы доступа будут обсуждаться позже. общедоступный модификатор — поле доступно из всех classs.private модификатор — поле доступно только внутри своего класса."

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

person Smutje    schedule 15.02.2014
comment
Можете добавить что-нибудь существенное? Может быть, ссылка на JLS, которая описывает это? - person Jeroen Vannevel; 16.02.2014
comment
Вот тот же ответ: stackoverflow.com/questions/16354728/ Неважно, это С# - person SSpoke; 16.02.2014
comment
Первый (самый левый) используемый модификатор позволяет вам контролировать, какие другие классы имеют доступ к полю-члену. На данный момент рассмотрим только общедоступные и частные. Другие модификаторы доступа будут рассмотрены позже. модификатор public — поле доступно из всех классов. приватный модификатор — поле доступно только внутри своего класса. (docs.oracle.com/javase/tutorial/java/javaOO/variables .html) - person Smutje; 16.02.2014
comment
Отредактируйте его в своем посте, чтобы его было легче увидеть, и у вас был достойный ответ :) - person Jeroen Vannevel; 16.02.2014