Доступ к наследуемым переменным класса в Java - PullRequest
6 голосов
/ 06 января 2012

Если вы наследуете от действия, в котором были объявлены определенные переменные-члены, как вы получаете доступ к этим переменным-членам в подклассе, выполняющем наследование?

Ответы [ 4 ]

7 голосов
/ 06 января 2012

public или protected имена членов могут быть доступны через this.memberName из любого конструктора или не static метода или инициализатора.

private или членов уровня пакета (доступ из подклассав другом пакете) не могут быть доступны напрямую и должны быть доступны через непривилегированный интерфейс, такой как public getter.

5 голосов
/ 06 января 2012
class A {
    protected int a = 3;
}

class B extends A {
    protected int b = 2;

    void doIt() {
        System.out.println("super.a:" + super.a);
        System.out.println("this.b: " + this.b);
    }
}
3 голосов
/ 06 января 2012

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

Если члены были объявлены protected или public, то вы получаете к ним доступ, как если бы они были объявлены в вашем собственном классе (this.var или просто var, если нет двусмысленности). Если у вас есть член в подклассе с тем же именем, что и у суперкласса, вы можете использовать super.var для доступа к переменной суперкласса.

1 голос
/ 06 января 2012

Как утверждают другие, открытые и защищенные поля могут быть доступны через this.field из подкласса. Доступ к частным полям пакета также можно получить таким же образом, но только если подкласс находится в том же пакете, что и родительский.

Таким способом нельзя получить доступ к закрытым полям, но к ним можно получить доступ с помощью Java reflections , если настройки безопасности позволяют это. Это обычно не рекомендуемая практика (частные члены обычно являются частными по какой-то причине), но она может быть полезна в некоторых ситуациях, например, для доступа к закрытым членам класса в целях тестирования кода. См. ответы на этот вопрос о том, как использовать отражение таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...