繁体   English   中英

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

[英]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);
    }
}

提前致谢。

在您的代码中, 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;
}

注意我们如何使用super Constructor关键字传递基类Person所需的构造函数参数。 这始终必须是派生类构造函数中的第一行。

然后,您可以将StudentInstructor构造为:

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

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

在Person类中没有空的构造函数,因此您必须创建它并且它应该可以完美地工作。 不要忘记除非明确调用,否则默认情况下会调用super()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM