0

简而言之,我有一个包含多个变量和方法的抽象类。其他类扩展了这个抽象类,但是当我尝试通过调用抽象类中的 getter 方法来读取抽象类中的私有变量时,它返回 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();
    }

}

仍然打印出空值。

4

1 回答 1

1

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 );
     }

     // ...
}

如果您需要在firstWord每次execute()调用时修改字符串,则可能不需要使用带String参数的构造函数(我在上面添加了默认构造函数)。但是,如果你这样做,那么要么

  • 必须确保setFirstWord()在之前调用过getFirstWord(),或者,
  • getFirstWord()退货时处理案件null。这可以通过简单地使用默认值(可能由每个子类确定)或其他方式来实现,例如无法执行。

由于我不知道您实施的所有细节,我无法告诉您更多信息。

于 2013-10-25T22:53:28.020 回答