子类中的Java构造函数错误

时间:2015-03-24 13:11:53

标签: java

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方法中创建新对象时,我正在传递父类和子类的参数。无法找出编译错误的原因?

4 个答案:

答案 0 :(得分:2)

您需要正确创建父类,并在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");
    // ...
}

答案 1 :(得分:1)

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

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

将尝试在超类中调用构造函数,因为您没有明确调用它,所以您可以说您的代码将是这样的

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

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

答案 2 :(得分:0)

employee的构造函数上,您必须首先调用person中的super(name);构造函数,然后初始化子类

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

答案 3 :(得分:0)

隐式超级构造函数Person()未定义。

因此,您必须显式调用其父构造函数。