Защо имам достъп до частна променлива на един екземпляр от метод, извикан на друг екземпляр на същия обект?

В кода по-долу:

 class Person {
    private String name;
    private int x = 5;
    public Person(String name) {
        this.name = name;
    }
    public void invoke(Person p) {
        System.out.println(p.name);
    }
}
class YU {
    public static void main(String args[]) {
        Person p1 = new Person("P1");
        Person p2 = new Person("P2");
        p1.invoke(p2);
    }
}

Когато извикам метода "invoke" на екземпляр p1 и предам p2 като аргумент, мога да осъществя достъп до променливата на частния екземпляр на p2 директно в метода за извикване, който беше извикан на екземпляра p1. Защо това не хвърля грешка по време на компилиране? Въпреки че p2 е екземпляр на клас Person, но методът се извиква на p1, а не на p2 и следователно само частните променливи на p1 трябва да бъдат директно достъпни. Моля, пояснете.


person paidedly    schedule 18.05.2015    source източник
comment
Когато търсите помощ, отделете време, за да форматирате кода си разумно.   -  person T.J. Crowder    schedule 18.05.2015


Отговори (1)


Когато извикам метода "invoke" на екземпляр p1 и предам p2 като аргумент, мога да осъществя достъп до променливата на частния екземпляр на p2 директно в метода за извикване, който беше извикан на екземпляра p1. Защо това не хвърля грешка по време на компилиране?

Защото не е грешка. name е частен за класа Person, а не за конкретен инстанция на класа. Няма поверителност за всеки екземпляр. Контролът на достъпа на Java се отнася до това от кой клас (и чрез разширение, пакет) е част кодът, а не към коя инстанция е бил извикан.

person T.J. Crowder    schedule 18.05.2015