Почему я получаю нулевое значение в следующем коде относительно наследования Java - PullRequest
0 голосов
/ 31 мая 2019

Я предоставлю код и выходные данные, предоставленные компилятором для лучшего понимания проблемы. Вы увидите нулевое значение для регистрационного номера ... есть проблема. На выходе вы заметите, что я получаю нулевое значение для регистрационного номера ... я не получаю его, потому что все это казалось правильным, пока его не было. wasn't

public class Student {
    private String regNo;
    //Student student = new Test();

    public String getRegNo() {
        return regNo;
    }

    public void setRegNo(String number) {
        this.regNo = regNo;
    }

    public void displayRegistrationNumber(){
        System.out.println("Registration number: "+ getRegNo());
    }

}

-----------------------------------------------------------------'
public class Test extends Student{
    private double sub1, sub2;


    public double getSub1() {
        return sub1;
    }

    public void setSub1(double sub1) {
        this.sub1 = sub1;
    }

    public double getSub2() {
        return sub2;
    }

    public void setSub2(double sub2) {
        this.sub2 = sub2;
    }

    public void displayScore(){
        System.out.printf("Scores: Subject1 = %.0f, Subject2 = %.0f \n",getSub1(), getSub2());
    }
}

-----------------------------------------------------------------------
public class Results extends Test {
    private double total;

    public double getTotal() {
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }


    public void displayTotalScores(){
        setTotal(getSub1()+getSub2());
        System.out.printf("Total marks: %.0f \n", getTotal());
    }

}
---------------------------------------------------------------------

public class Main_method {
    public static void main(String[] args){
        Results results = new Results();

        results.setRegNo("2017-04-06859");
        results.setSub1(75.47);
        results.setSub2(89);


        results.displayRegistrationNumber();
        results.displayScore();
        results.displayTotalScores();

    }
}

Вот вывод. Обратите внимание на ноль

Registration number: null
Scores: Subject1 = 75, Subject2 = 89 
Total marks: 164 `

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Здесь вместо присвоения parameter number regNo вы просто переназначаете ему свое собственное значение (изначально нулевое):

public void setRegNo(String number) {
    this.regNo = regNo;
}

поэтому измените его на:

this.regNo = number;
0 голосов
/ 31 мая 2019

Это ожидаемое поведение, аргумент, который вы передали public void setRegNo(String number), никогда не используется.

 this.regNo = regNo;

переназначает regNo, объявленный в классе Student (который в данном случае равен null)обратно к объекту, который его вызывает.

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

т.е.

 public void setRegNo(String regNo)

или

this.regNo = number;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...