所有类的类声明,构造函数和toString方法

时间:2014-06-09 18:05:24

标签: java class testing constructor tostring

问题:
实现超级人员。制作两个班,学生和讲师 继承自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);
    }
}

提前致谢。

2 个答案:

答案 0 :(得分:2)

在您的代码中,类StudentInstructor派生自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所需的构造函数参数。这总是必须是派生类构造函数中的第一行。

然后您可以将StudentInstructor构建为:

Student s = new Student("TheMajor", "TheName", 42);

Instructor i = new Instructor(1000, "TheName", 42);

答案 1 :(得分:0)

Person类中没有空构造函数,所以你必须创建它,它应该完美地工作。除非明确调用,否则不要忘记默认调用super()。