gpt4 book ai didi

Java错误-实际和形式参数列表长度不同

转载 作者:行者123 更新时间:2023-11-30 08:14:32 25 4
gpt4 key购买 nike

我编写了以下 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));
}
}

最佳答案

要解决您的问题,您应该删除不必要的继承:

// remove extends Student
class Exam {
// class code here
}

// remove extends Exam
class Result {
// class code here
}

鉴于您的类(class),我看不出 Exam 的原因扩展StudentResult扩展Exam .

想想extends作为"is"关系。如果你能说 Exam,你应该扩展是一个 StudentResult 是一个 Exam .在这种情况下没有意义。

当一个类扩展另一个类并调用子类 构造函数时,它需要做的第一件事就是调用父类(super class) 构造函数。如果您不自己调用它,它将被隐式调用。问题是它会尝试调用默认构造函数,但只有在您不创建自己的构造函数时才会创建默认构造函数。

所以当你这样做的时候:

new Exam(20, 20)

确实如此:

Exam(int m1, int m2) {
super(); // implicit call to Student default constructor
System.out.println("\nThe marks obtained in first subject is:"+m1);
System.out.println("\nThe marks obtained in second subject is:"+m2);
}

它正在尝试调用默认的无参数 Student()构造函数。但是自从你创建了 Student(String name) ,默认不存在。这就是您收到错误的原因。

关于Java错误-实际和形式参数列表长度不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com