问题:
实现超级人员。制作两个班,学生和讲师
继承自Person。一个人有一个名字和一个出生年份。一个学生
有专业,教练有薪水。写类声明,
构造函数,以及所有类的String方法。写一个测试程序
测试这些类和方法。
这可能不是一个复杂的,但我是java的初学者。请帮我。 我在两个构造函数' student()'上都收到了以下错误:和'讲师()'。
"constructor Person in class Person cannot be applied to given types;
required: String,int
found: no arguments
reason: actual and formal argument lists differ in length."
这是我的代码:
package One;
class Person{
String name;
int yob;
Person(String s, int d){
name = s;
yob = d;
}
@Override
public String toString(){
return "Name: "+name+"\n Year of Birth: "+yob;
}
}
class Student extends Person{
String major;
Student(String s){
major = s;
}
@Override
public String toString(){
return "The student did his majors in "+major;
}
}
class Instructor extends Person{
int salary;
Instructor(int a){
salary = a;
}
@Override
public String toString(){
return String.format("The salary is ",salary);
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person("Stephen", 1991);
System.out.println(p);
}
}
提前致谢。
答案 0 :(得分:2)
在您的代码中,类Student
和Instructor
派生自Person
。这意味着派生类也需要基类所需的任何构造函数参数。当您创建Student
时,编译器将如何知道在Person
构造函数的参数中放入什么内容?
所以代码应该是这样的:
// Student constructor
Student(String majorParam, String nameParam, int yobParam)
{
super(nameParam, yobParam);
this.major = majorParam;
}
...
// Similarly, Instructor constructor
Instructor(int salaryParam, String nameParam, int yobParam)
{
super(nameParam, yobParam);
salary = salaryParam;
}
注意我们如何使用Person
constructor关键字传递基类super
所需的构造函数参数。这总是必须是派生类构造函数中的第一行。
然后您可以将Student
和Instructor
构建为:
Student s = new Student("TheMajor", "TheName", 42);
Instructor i = new Instructor(1000, "TheName", 42);
答案 1 :(得分:0)
Person类中没有空构造函数,所以你必须创建它,它应该完美地工作。除非明确调用,否则不要忘记默认调用super()。