类中的java构造函数不能应用于给定的类型

2022-09-02 09:28:45

我有2个子类:员工,学生他们属于超类人。

这是我老师给出的代码(任务):


public class Person
{

   private String name;
   private int yearOfBirth;

   /**
    * Create a person with given name and age.
    */
   Person(String name, int yearOfBirth)
   {
      this.name = name;
      this.yearOfBirth = yearOfBirth;
   }
}

class Student extends Person
{

   private String SID;    // student ID number

   /**
    * Create a student with no parameters.
    */

   Student()
   {
    //task.
   }
}

public class Staff extends Person
{

   private String roomNumber;

   /**
    * Construct a staff member with field values and no pamaeters.
    */
   public Staff()
   {
    //task 
   }
}

我不知道我可以输入什么来创建一个没有参数的对象。它总是出现一个错误,例如:构造函数 类中的Person不能应用于给定的类型;required: java.lang.String,int;

我已经在网上检查了有2种方法可以解决这个问题:

  1. 在超类中添加默认值:。Person()//without parameter

    在子类学生中:

Student()
  {
  Person astudent = new Student() //I guess.
  }
  1. 在子类中添加一个 super():
Student()
 {
  super("xxx")//I guess.
 }

我不知道该怎么办。我是学习BlueJ的入门者。希望任何人都可以帮助我。谢谢。


答案 1

由于超类没有默认构造函数,因此在子类 ( 和 ) 中,必须将超类构造函数作为第一个语句调用。PersonStudentStaff

您应该像这样定义子类构造函数:

Student() {
    super("a_string_value", an_int_value);// You have to pass String and int values to super class
}

Staff() {
    super("a_string_value", an_int_value); // You have to pass String and int values to super class
}

答案 2

构造函数要做的第一件事是调用超类的构造函数(具有相同的参数)。Person 没有无参数构造函数,因此,您必须通过以下两种方式之一更改代码:

Student(String name, int yearOfBirth)
{
 //task.
}

Student()
{
super("", 0);
 //task.
}

员工也是如此


推荐