Java的.隐式超级构造函数Employee()未定义.必须显式调用另一个构造函数

use*_*658 26 java eclipse constructor superclass

您好我是Java新手,我在生产工人类中遇到此错误.我的生产工作者构造函数说明显了调用另一个构造函数.我不知道该怎么办?.

import java.util.Date;

public class Employee
{
      private String name, number;
      private Date date;

      public Employee(String name, String number, Date date)
      {
            setName(name);
            setNumber(number);
            setDate(date);
      }

      public void setName(String n)
      {
            name = n;
      }
      public void setNumber(String n)
      {
            number = n;
            // you can check the format here for correctness
      }
      public void setDate(Date d)
      {
            date = d;
      }

      public String getName()
      {
            return name;
      }
      public String getNumber()
      {
            return number;
      }
      public Date getDate()
      {
            return date;
      }
}



public class ProductionWorker extends Employee
{
      private int shift;
      private double hourlyrate;
       // error is here (Implicit super constructor Employee() is undefined. Must explicitly invoke another constructor).
      public ProductionWorker(int shift, double hourlyrate)
      {
            setShift(shift);
            setHourlyPayRate(hourlyrate);
      }

      public void setShift(int s)
      {
            shift = s;
      }
      public void setHourlyPayRate(double rate)
      {
            hourlyrate = rate;
      }

      public int getShift()
      {
            return shift;
      }
      public double getHourlyPayRate()
      {
            return hourlyrate;
      }
}
Run Code Online (Sandbox Code Playgroud)

xap*_*mah 28

您知道的任何类的任何构造函数都会创建一个对象.因此,构造函数应包含其类的正确初始化代码.但是如果你有一些扩展另一个的类(让我们称之为"父"),那么类的构造函数不能包含按定义初始化所需的所有代码(例如,你不能定义父类的私有字段).这就是为什么类的构造函数必须调用其父类的构造函数的原因.如果没有显式调用它,则调用默认的父构造函数(没有任何参数).

因此,在您的情况下,您可以在父实现默认构造函数,也可以直接调用类中的任何构造函数.

  • 构造函数不创建对象,只是初始化它们. (4认同)

Bar*_*lla 9

正如其他人已经提到的那样,您需要public Employee(){}Employee类中提供默认构造函数.

会发生什么是编译器自动为没有构造函数的任何类提供无参数的默认构造函数.如果你的类没有显式超类,那么它有一个隐式超类Object,它有一个无参数的构造函数.在这种情况下,您在类中声明构造函数,Employee因此您还必须提供无参数构造函数.

说过这个Employee课应该是这样的:

你的班级员工

import java.util.Date;

public class Employee
{
      private String name, number;
      private Date date;

      public Employee(){} // No-argument Constructor

      public Employee(String name, String number, Date date)
      {
            setName(name);
            setNumber(number);
            setDate(date);
      }

      public void setName(String n)
      {
            name = n;
      }
      public void setNumber(String n)
      {
            number = n;
            // you can check the format here for correctness
      }
      public void setDate(Date d)
      {
            date = d;
      }

      public String getName()
      {
            return name;
      }
      public String getNumber()
      {
            return number;
      }
      public Date getDate()
      {
            return date;
      }
}
Run Code Online (Sandbox Code Playgroud)

这是Java Oracle教程 - 为您的类提供构造函数章节.通过它,您将更清楚地了解发生了什么.