Почему private поле другого объекта доступно внутри самого класса?

Есть следующий кусок кода:

class Person{
    private String name;
    public Person(String name){
        this.name = name;
    }
    public boolean equalsPerson(Person p){
        System.out.println(this.name);
        System.out.println(p.name);
        return p.name.equals(this.name);
    }
}

Почему p.name Доступна?
Ведь name объявлена как private, а значит у объекта p, она не должна быть доступна.
Но она доступна. Почему?


Ответы (2 шт):

Автор решения: Igor

Модификатор доступа private защищает члены класса от доступа из кода, находящегося в других классах, а не в других объектах.

→ Ссылка
Автор решения: default locale

Поведение private и других модификаторов доступа описано в спецификации Java §6.6.1 «Определение доступности»:

... Otherwise, the member or constructor is declared private, and access is permitted if and only if it occurs within the body of the top level type (§7.6) that encloses the declaration of the member or constructor.

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

В данном случае класс верхнего уровня: Person. То, что name объявлен как private говорит о том, что к нему можно обращаться в любом месте внутри класса Person. При этом неважно относится name к текущему объекту (this) или к другому объекту Person.

→ Ссылка