子类中的java构造函数错误

voase2hg  于 2021-08-20  发布在  Java
关注(0)|答案(4)|浏览(349)
class Person 
{
    String name = "No name";

    public Person(String nm)
    {
        name = nm;
    }
}
class Employee1 extends Person
{
    String empID ="0000";
    public Employee1(String id)
    {                            // Line 1
        empID = id;
    }
}
public class EmployeeTest 
   {
       public static void main(String[] args) {
           Employee1 e = new Employee1("4321");
           Person p = new Person("Hello");
           System.out.println(e.empID);
       }
   }

我听到编译错误说 constructor Person in class Person cannot be applied to given types; required String found no arguments 但在main方法中创建新对象时,我同时传递父类和子类的参数。无法找出编译错误的原因?

sh7euo9m

sh7euo9m1#

您需要正确地创建父类,并将 name 作为 Person 承包商要求:

public Employee1(String id) {
    super("person name");   // create the parent
    empID = id;
}

或者类似于:

public Employee1(String id, String name) {
    super(name);   // create the parent
    empID = id;
}

public static void main(String[] args) {
    Employee1 e = new Employee1("4321", "Hello");
    // ...
}
2wnc66cl

2wnc66cl2#

因为只有在默认构造函数没有显式调用超类构造函数时,子类中的构造函数才会隐式调用其直接超类的无参数构造函数

public Employee1(String id)
{                            // Line 1
    empID = id;
}

将尝试在超类中调用构造函数,因为您并没有显式地调用它,所以您可以说您的代码如下

public Employee1(String id)
{
    super();                            // Line 1
    empID = id;
}

但在父类中并没有“无参数”构造函数,所以它会给出这样的错误。

1mrurvl1

1mrurvl13#

隐式超级构造函数 Person() 没有定义。
因此,必须显式调用其父构造函数。

wpcxdonn

wpcxdonn4#

论网络的构造器 employee 您必须首先调用 personsuper(name); 然后初始化子类

class Employee1 extends Person
{
    String empID ="0000";
    public Employee1(String id, String name)
    {                            // Line 1
        super(name);
        empID = id;
    }
}

相关问题