Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写错误Java,程序不读取两个方法,只读取一个_Java_Class_Object_Overriding - Fatal编程技术网

重写错误Java,程序不读取两个方法,只读取一个

重写错误Java,程序不读取两个方法,只读取一个,java,class,object,overriding,Java,Class,Object,Overriding,我有这个密码 public class Student extends Person { //id represents the student's ID private int id; //grade represents the student's grade in the course private Grade grade; //constructor allows user to define first and last names, id,

我有这个密码

public class Student extends Person {
    //id represents the student's ID
    private int id;
    //grade represents the student's grade in the course
    private Grade grade;

    //constructor allows user to define first and last names, id, and grade of student in demo
    public Student(String fName, String lName, int id, Grade grade) {
        super(fName, lName);
        this.id=id;
        this.grade=grade;
    }
    //get methods for fields
    public int getId() {
        return id;
    }
    public Grade getGrade() {
        return grade;
    }
    //toString prints out the string from person class along with id and grade fields in formatted string
    public String toString() {
        return super.toString()+"'s id is " + id + "." +getGrade();
    }
}
还有这个密码。问题在于,toString方法使用passFailGrade getGrade()返回值,而不是类中的方法

public class Grade {

    private double score;

    public Grade(double score) {
        this.score=score;
    }
    public void setScore(double score) {
        this.score=score;
    }
    public double getScore() {
        return score;
    }
    public char getGrade() {
        if (getScore()>=90)
            return 'A';
        else if (getScore()>=80)
            return 'B';
        else if (getScore()>=70)
            return 'C';
        else if (getScore()>=60)
            return 'D';
        else
            return 'F';
    }
    public String toString() {
        return "\nThe student recieved a " + getGrade() + 
                " and had a mark of " + getScore() + ".";
    }
}
不确定
PassFailGrade
中是否有问题:

public class PassFailGrade extends Grade {

    public PassFailGrade(double score) {
        super(score);
    }
    public char getGrade() {
        if (getScore()>=50)
            return 'Y';
        else
            return 'N';
    }
    public String toString() {
        return "(Y for yes/N for no) The student passed their course (" 
                + getGrade()+ ")." + super.toString();
    }
}
然后演示类只需在构造函数中定义并打印

public class StudentDemo {
    public static void main(String[] args) {
        PassFailGrade bo= new PassFailGrade(98);
        Student s1 = new Student("bob", "blake", 123, bo);
        System.out.println(s1); 
    } 
}
输出:

bob blake's id is 123.(Y for yes/N for no) The student passed their course (Y). The student recieved a Y and had a mark of 98.0. 鲍勃·布莱克的id是123。(Y代表是/N代表否)该学生通过了他们的课程(Y)。这个学生得了一个Y,得了98.0分。
实际上,您正在重写
getGrade()
方法。这是您打算做的事情,但现在在调用
super.toString()
时遇到了问题—它仍然使用您重写的方法

您可以通过以下方式将
PassFailGrade
中的
更改为字符串来解决此问题:

@Override
public String toString() {
    return "(Y for yes/N for no) The student passed their course ("
            + getGrade()+ ")." + "\nThe student recieved a " + super.getGrade() +
            " and had a mark of " + getScore() + ".";
}

请注意,我只调用
super.getGrade()
。这将产生正确的结果。

你能说出哪个是
PassFailGrade
类,哪个是
Student
类吗?Student类是一个更广泛的类,它定义了名称,并且在ToString中有一个getGrade()。你展示了两个
getGrade
方法?哪些属于哪个类别?passfailgrade类别和grade类别passfailgrade是grade的一个扩展。你能在上面共享的代码中添加类签名吗?这样我们就可以更好地理解你的代码了?谢谢,我的代码中确实出现了错误,这是错误的,很抱歉误导了任何人。事实上,我没有看到你的代码有问题。这是我们任何人都可能犯的简单错误。