我最近遇到了对象初始化问题。
我有一个类(通过这种方式设置,用于持久性数据的存储和加载)
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());
答案 0 :(得分:1)
初始化代码:private String name =“”;在父构造函数之后运行。删除初始化,它将正常工作。但是,您不应从构造函数中调用可重写的方法。 :)
private String name;
代替
private String name="";
答案 1 :(得分:-1)
这是因为我认为Example类方法受到保护。不能从类外部调用它,因此您正在调用超类方法。那什么也没做,所以值仍然是""
。要检查这一点,请将print语句添加到load方法中,看看它是否被调用。