2013-05-12 2 views
3

У меня есть класс, который имеет одно поле с именем orbits (он имеет тот же тип, что мой класс Body и имеет private модификатор):Доступ частного поля экземпляра объекта

public class Body { 

    // I defined it as private field 
    private Body orbits = null; 

    public Body getOrbits(){ 
     return orbits; 
    } 

    public void setOrbits(Body orbits){ 
    this.orbits = orbits; 
    } 

    public void capture(Body victim){ 
     //Why 'victim' can access 'orbits' ? 
     victim.orbits = this; 
    } 
} 

В классе я определен метод с именем capture(Body victim), который имеет один параметр с типом Body. Мне интересно в методе, почему я могу напрямую получить доступ к полю privateorbits примера victim? Я имею в виду, что поле private, разве это не доступно через жертву экземпляра?

+0

Это потому, что он обрабатывается в * том же * классе. Будь то разные классы, он не будет доступен. – skuntsel

ответ

6

Конфиденциальность не относится к экземпляру - это за класс.

Класс может получить доступ к закрытым полям всех экземпляров.

Например, метод equals(Object o) может отличать o (если необходимо) от того же типа и сравнивать его частные члены с объектом, на который был вызван equals().

+0

Вы имеете в виду, если я определяю метод захвата (тело жертвы) в классе, отличном от тела, то жертва не может получить доступ к орбитам, не так ли? – Mellon

+0

Если метод capture() был определен в другом классе (и ни один из них не содержал другого), то метод capture() не мог получить доступ к закрытым членам Body. –

1

Потому что victim является экземпляром Body, он может получить доступ к любому полю Body isntance.

0

С victim также имеет тип Body, любой экземпляр Body может обращаться к частным членам экземпляра victim.

1

По section 6.6.1 of the Java Language Specification:

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

+1

Ссылка на JLS является наиболее убедительной. Это был бы мой ответ. – skuntsel

0

жертва является экземпляром класса Body и имеет все атрибуты этого класса. Каждый экземпляр будет иметь орбиты частной собственности.

Если вам нужен класс-атрибут, используйте «private static»

Смежные вопросы