吸气剂返回旧值

时间:2020-01-21 15:32:00

标签: java object constructor initialization

我最近遇到了对象初始化问题。

我有一个类(通过这种方式设置,用于持久性数据的存储和加载)

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"

有人知道这可能是根本原因吗?如果我要在构造函数中设置name,则可以正常工作。但是,当它经过super时,它会出错。

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

2 个答案:

答案 0 :(得分:1)

初始化代码:private String name =“”;在父构造函数之后运行。删除初始化,它将正常工作。但是,您不应从构造函数中调用可重写的方法。 :)

private String name;

代替

private String name="";

答案 1 :(得分:-1)

这是因为我认为Example类方法受到保护。不能从类外部调用它,因此您正在调用超类方法。那什么也没做,所以值仍然是""。要检查这一点,请将print语句添加到load方法中,看看它是否被调用。