![](/img/trans.png)
[英]what does “The methods and constructors of objects created by a class loader may reference other classes” mean?
[英]Class Declarations, Constructors and toString methods for all the classes
题:
实施一个超一流的Person。 继承从Person继承的两个类,Student和Instructor。 一个人有名字和出生年月。 学生有专业,指导老师有薪水。 将所有类的类声明,构造函数和方法写入String。 编写测试这些类和方法的测试程序。
这可能并不复杂,但是我是Java的初学者。 请帮我。 我在构造函数“ student()”和“ instructor()”上都遇到了以下错误。
"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);
}
}
提前致谢。
在您的代码中, 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;
}
注意我们如何使用super
Constructor关键字传递基类Person
所需的构造函数参数。 这始终必须是派生类构造函数中的第一行。
然后,您可以将Student
和Instructor
构造为:
Student s = new Student("TheMajor", "TheName", 42);
Instructor i = new Instructor(1000, "TheName", 42);
在Person类中没有空的构造函数,因此您必须创建它并且它应该可以完美地工作。 不要忘记除非明确调用,否则默认情况下会调用super()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.