Java erroractual和formal参数列表的长度不同
我已经编写了以下Java程序。但是我不断得到一个错误,说我的构造函数的实际参数和形式参数长度不同。我不明白问题是什么。有人能告诉我我的程序出了什么问题以及我如何调试它吗
class Student
{
String name;
Student(String name)
{
System.out.println("\nThe name of the student is:"+name);
}
}
class Exam extends Student
{
int m1, m2;
Exam(int m1, int m2)
{
System.out.println("\nThe marks obtained in first subject is:"+m1);
System.out.println("\nThe marks obtained in second subject is:"+m2);
}
}
class Result extends Exam
{
int totalmarks;
int compute(int m1, int m2)
{
totalmarks=m1+m2;
return(totalmarks);
}
}
public class StudentTest
{
public static void main(String[] args)
{
Student s = new Student("rose");
Exam e = new Exam(20,20);
Result r = new Result();
System.out.println("\nThe total marks obtained is:"+r.compute(20,20));
}
}
# 1 楼答案
在学生和考试中定义非参数化构造函数
在学生课堂上:
在考试课上:
# 2 楼答案
要解决问题,应删除不必要的继承:
考虑到您的类,我不认为有理由
Exam
扩展Student
和Result
扩展Exam
把},并且},那么应该扩展。在这种情况下,这毫无意义
extends
看作是一种“是一种”关系。如果可以说Exam
是一个{Result
是一个{当一个类扩展了另一个类,并且调用了子类构造函数时,它需要做的第一件事就是调用超类构造函数。如果您自己不调用它,它将被隐式调用。问题是它试图调用默认构造函数,但只有在您不创建自己的构造函数时,才会创建默认构造函数
所以当你这样做的时候:
它确实:
它正在尝试调用默认的无参数
Student()
构造函数。但是由于您创建了Student(String name)
,默认值不存在。这就是为什么你会出错# 3 楼答案
你的问题是你的等级制度。构造函数执行期间的第一步是运行父类的默认构造函数
考试扩展了Student,但Student没有默认构造函数。加一个
更好的是,重新思考你的逻辑。延长学生考试时间毫无意义。 考试由学生参加。你是说考试就是学生