Переменное наследование в Java (Начинающий) - PullRequest
1 голос
/ 15 января 2012

У меня есть класс A с переменной bool var = true и метод получения getVar().Я пытаюсь создать класс B, который расширяет A и переопределяет var до bool var = false.Код:

public class A{
    protected boolean var = true;
    public boolean getVar(){
        return var;
    }
}

public class B extends A{
    protected boolean var = false;
}

Проблема в том, что если я выполню:

B b_class = new B();
System.out.println(b_class.getVar());

, я получу true, и я не понимаю, почему.Что я делаю не так?

Ответы [ 5 ]

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

Вы не «наследуете» переменные; B.var просто скрывает A.var, но только в B. Вы вызываете getVar(), метод в A, который видит A.var, то есть true.

3 голосов
/ 15 января 2012

Вы объявляете новое поле var в B, которое скрывает A.var. Попробуйте вместо этого:

public class B extends A {
    public B() {
        var = false;
    }
}
2 голосов
/ 15 января 2012

Вы не должны создавать новую переменную экземпляра в переопределенном классе, потому что она не может быть видна суперклассу (A), и поэтому, когда вызывается getVar(), он вернет значение, которое может видеть , Вместо этого вы должны установить значение var в конструкторе так, как вам нужно.

public B() {
    var = false;
}
1 голос
/ 09 ноября 2015

Переменная, инициализированная в суперклассе, не может быть изменена следующим образом. Вы уже объявили защищенный логический тип var = true. Таким образом, независимо от того, что вы делаете в расширенном классе, он всегда будет показывать вам правду.

0 голосов
/ 15 января 2012

GetVar не определен в B, поэтому полиморфизм переходит на A, где var - true.

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