简单地说,我有一个包含多个变量和方法的抽象类。其他类扩展了这个抽象类,但是当我尝试通过调用抽象类内部的 getter 方法来读取抽象类中的私有(private)变量时,它返回 null 作为变量的值。
public class JavaApplication {
public static void main(String[] args) {
NewClass1 n1 = new NewClass1();
NewClass2 n2 = new NewClass2();
n1.setVar("hello");
n2.print();
}
}
public class NewClass1 {
public String firstWord;
public void setVar(String var) {
firstWord = var;
}
public String getVar () {
return firstWord;
}
}
public class NewClass2 extends NewClass1{
public void print() {
System.out.println(makeCall());
}
public String makeCall() {
return getVar();
}
}
仍然打印出 null。
最佳答案
在String
初始化之前,它将为空。您可能应该在抽象类中有一个构造函数来设置它。
public abstract class Command
{
String firstWord; // = null
protected Command(){}
protected Command( String w )
{
firstWord = w;
}
//...
}
public class Open extends Command
{
public Open()
{
this( "your text" );
}
public Open( String w )
{
super( w );
}
// ...
}
<小时/>
如果每次调用 execute()
时都需要修改 firstWord
字符串,则可能不需要使用带有 String
的构造函数> 参数(我在上面添加了默认构造函数)。但是,如果您这样做,那么要么
- 您必须确保在
getFirstWord()
之前调用setFirstWord()
,或者, - 处理
getFirstWord()
返回null
的情况。这可以通过简单地使用默认值(可能由每个子类确定)或其他东西来实现,例如无法执行。
由于我不知道您实现的所有细节,因此无法告诉您更多信息。
关于java - 如何读写抽象类的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600327/