【问题标题】:Mutator and Accessor(Using Inheritance)修改器和访问器(使用继承)
【发布时间】:2015-12-30 10:15:39
【问题描述】:

我希望我的程序输入另一个类的私有变量。

我想使用 mutator 和 accessor。

它不断出错 NullPointerException。我的代码有什么问题?

public abstract class Inputs {
private String val;
private String typ;
public abstract void setVal(String val);
public abstract void setTyp(String typ);
public abstract String getVal();
public abstract String getTyp();
}

public DeckOfCards extends Inputs{
String val;
String typ;
static DeckOfCards kerds = new DeckOfCards();
    public void setVal(String val){
        this.val = val;
    }

    public void setTyp(String typ){
        this.typ = typ;
    }

    public String getVal(){
        return this.val;
    }

    public String getTyp(){
        return this.typ;
    }
    public static void main(String args[]){
       System.out.print("Value: ");
       kerds.setVal(kerds.val);
       if(kerds.val.equals("A"){
          System.out.print("Type: ");
          kerds.setTyp(kerds.typ);
       }
    }
}

【问题讨论】:

标签: java inheritance accessor mutators


【解决方案1】:

这是您的问题kerds.setVal(kerds.val); kerds 在主运行时尚未创建。

  • 您需要在使用 DeckOfCards 实例之前对其进行初始化。
  • 仅在设置值后尝试检索它们。否则,尝试检索尚未设置的值将引发 NullPointerException(正如 Rehman 指出的那样)

以下是正确使用的示例:

     public static void main(String args[]){
        DeckOfCards kerds = new DeckOfCards();
        kerds.setVal("A");
        kerds.setTyp("TYPE_A");

        System.out.println("Displaying values of kerds");
        System.out.println("kerds value : " + kerds.getVal());
        System.out.println("kerds type : " + kerds.getTyp());
        }

【讨论】:

【解决方案2】:

kerds.setVal(kerds.val) 正在设置一个空值。此时 kerds.val 的值尚未设置。基本上你的代码没有任何意义。您正在设置一个尚未设置的具有相同属性值的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多