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

新手上路,请多包涵

我有 2 个子类:Staff、Student,它们属于超类 Person。

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


 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 中的构造函数 Person 不能应用于给定类型;必需:java.lang.String,int;

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

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

在学生子类中:

 Student()
  {
  Person astudent = new Student() //I guess.
  }

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

我不知道该怎么办。我是学习 BlueJ 的初学者。希望有人能帮助我。非常感谢。

原文由 user3679454 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 701
2 个回答

由于您的超类 Person 没有默认构造函数,因此在您的子类中( StudentStaff ),2d 必须将构造函数作为第一个构造函数调用 —

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

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


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

原文由 Abimaran Kugathasan 发布,翻译遵循 CC BY-SA 4.0 许可协议

添加 super(NAME_IN_STRING_TYPE,YEAR_OF_BIRTH_IN_INT_TYPE); 作为子类构造函数中的第一条语句,例如

学生构造器

Student()
{
super("name", 1970); // String,int arguments passed
 //task.
}

员工建设者

Staff()
{
super("name", 1970); // String,int arguments passed
 //task.
}

这是必需的,因为基类中没有默认的无参数构造函数。您必须在基类中显式定义一个无参数构造函数,或者您需要指示编译器调用基类的自定义构造函数。

注意:如果类具有用户定义的构造函数,编译器将不会在类中添加默认的无参数构造函数。只有在类中没有定义构造函数时,它才会添加默认的无参数构造函数。

原文由 Keerthivasan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题