当前位置: 首页 > 知识库问答 >
问题:

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

施华奥
2023-03-14

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

我在网上查过,有两种方法可以解决这个问题:

> < li>

在超类中添加默认值:< code > Person()//不带参数。

在子类学生中:

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

我不知道该怎么办。我是学习BlueJ的初学者。希望有人能帮帮我。谢谢您们。

共有3个答案

易焱
2023-03-14

添加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.
}

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

注意:如果编译器具有用户定义的构造函数,则编译器不会在类中添加默认的no-arg构造函数。仅当类中没有定义构造函数时,它才会添加默认的 no-arg 构造函数。

蒯宏达
2023-03-14

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

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

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

员工也是如此

凌长恨
2023-03-14

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

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

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
}
 类似资料:
  • 我得到了下面的代码,使用数组来查找一些prim数。然而,当试图编译我的用户类PalindromeArrayUser时,它说——“类中的构造函数不能应用于给定的类型” 要求:int。找到:没有论点。原因:实际参数和正式参数列表的长度不同。 但是,我已经向构造器传递了一个int值(与我的蓝图中设计的方式相同)。我不太明白问题来自哪里。谢谢。 这是我的两节课 而这就是我的用户类问题的来源。上面的类编译良

  • 在问我的问题之前,我想把一些事情说清楚。首先,我是Java和编程的新手。第二,这是我的第一个帖子,所以如果我做错了什么,请宽容对待我。最后,我不想要任何具体的解决办法,我的任务在任何回应这篇文章。这些问题要我来解决。我想要的是一个解释,为什么我的测试代码不能编译/运行。为了更好地理解这个问题,我将粘贴赋值信息,然后是给定的驱动程序类,然后是驱动程序类访问的我的类代码。我的编译器错误显示在标题中,但

  • 问题内容: 我有以下Java代码: 而且我不断收到错误消息:“无法将构造函数应用于给定类型” …这是否意味着超类的子类在构造函数中必须具有与超类相同数量的参数?我已经把头撞在墙上一个小时了。 问题答案: 子类不必有“相同数量的构造为超参数”任何构造函数,但它 确实 需要调用一些它的父类的构造函数从自己的构造。 如果超类具有no- arg构造函数,则默认情况下会被调用,如果省略了对超类构造函数的显式

  • 我正在制作一个配方应用程序,我遇到了这个错误:HomeItem类中的构造函数HomeItem不能应用于给定的类型;配方添加(新HomeItem(“viay”,R.drawable.vietnamese)); 这是我的代码: 公共类HomeFragment扩展了片段{View v;private RecyclerView myrecyclerview;private List recipe;publ

  • 我正在做作业,所以我只想修复我的编译错误,这样我就可以继续工作了。我需要创建一个PointList类,在ArrayList中保存一个Point对象列表。PointList类应该接受任何作为Point类实例或Point子类的对象。 我不断收到一个编译器错误,上面写着 我真的不明白我错过了什么,我已经通读了这本书,似乎不明白为什么我会得到这个错误。我已经制作了 Point 类并完成了测试,但似乎无法编