Геттер, возвращающий старое значение - PullRequest
2 голосов
/ 21 января 2020

У меня недавно возникла проблема с инициализацией моего объекта.

У меня есть класс (он настроен таким образом для постоянного хранения и загрузки данных)

public class Example extends SuperExample{
    private String name = "";
    public Example(){
        super();
    }

    public String getName(){
        return name;
    }

    @Override
    protected void load(){
        name = "Example";
    }
}

public abstract class SuperExample{
    protected abstract void load();
    public SuperExample(){
        //Do stuff
        load();
    }
}

getName() то, что вызывается после инициализации объекта, возвращает "", а не "Example".

Есть идеи, какова может быть причина root? Если бы я установить name в конструкторе, он работает нормально. Но когда он проходит через super, он ошибается.

Example e = new Example();
System.out.println(e.getName());

Ответы [ 2 ]

1 голос
/ 21 января 2020

Код инициализатора: private String name = ""; запускается ПОСЛЕ родительского конструктора. Удалите инициализацию, и она будет работать правильно. Но вы не должны вызывать переопределенные методы из конструкторов. :)

private String name;

вместо

private String name="";
0 голосов
/ 21 января 2020

Это потому, что метод класса Example защищен, я думаю. Он не вызывается извне класса, поэтому вы вызываете метод суперкласса. Это ничего не делает, поэтому значение по-прежнему "". Чтобы проверить это, добавьте оператор print в метод load и посмотрите, вызывается ли он.

...