Мутатор и аксессор (с использованием наследования)

Я хочу, чтобы моя программа вводила частную переменную из другого класса.

Я хочу использовать мутатор и аксессор.

Он продолжает выдавать ошибку 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);
       }
    }
}

person Mariel    schedule 02.10.2015    source источник
comment
Где твоя трассировка стека?   -  person Suresh Atta    schedule 02.10.2015
comment
Что такое трассировка стека?   -  person Mariel    schedule 02.10.2015
comment
Полная ошибка в вашей консоли: stackoverflow.com/questions/3988788/   -  person Suresh Atta    schedule 02.10.2015


Ответы (2)


Вот ваша проблема kerds.setVal(kerds.val); kerds еще не создается при запуске main.

  • Вам необходимо инициализировать экземпляр DeckOfCards перед его использованием.
  • Только пытайтесь получить значения после того, как они установлены. В противном случае попытка получить значение, которое еще не установлено, вызовет исключение NullPointerException (как указал Рехман)

Вот пример правильного использования:

     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());
        }
person Clyde D'Cruz    schedule 02.10.2015
comment
что, если пользователь должен сначала ввести его? следует ли использовать kerds.val=input.next(); ? - person Mariel; 02.10.2015
comment
Чтобы получить ввод с клавиатуры, посмотрите это: stackoverflow.com/questions/17538182/getting -клавиатурный ввод - person Clyde D'Cruz; 02.10.2015
comment
Если вы нашли этот ответ полезным, вы можете принять его, иначе не стесняйтесь голосовать за него :) stackoverflow.com/help/why- проголосовать - person Clyde D'Cruz; 02.10.2015

kerds.setVal(kerds.val) устанавливает нулевое значение. В этот момент значение kerds.val еще не установлено. По сути, ваш код не имеет никакого смысла. Вы устанавливаете свойство со значением того же свойства, которое еще не установлено.

person Rehman    schedule 02.10.2015