我有一个abstract
类,AbstractNode
和一个扩展它的具体类——节点。
我试图通过声明对象AbstractClass
并用 new Node() 实例化它们来“编程到接口”。
当我在构造函数中初始化它们后尝试在 Node 中使用变量时,我得到一个空指针。但是,如果我改用 getter 方法,一切正常。我错过了什么?
public abstract class AbstractNode
{
String str;
public abstract String getStr();
}
public class Node extends AbstractNode
{
String str;
public Node()
{
str= new String();
}
public String getStr()
{
return str;
}
}
主要方法如下所示:
public static void main(String[] args)
{
AbstractNode n= new Node();
String nullStr= n.str;
String regularStr= n.getStr();
}
现在,nullStr
包含一个null
引用,并且regularStr
包含一个对n.str
. 这里发生了什么?我可以直接访问其他不需要初始化的原始类型字段,例如 int,而无需任何 getter 方法。