Java编译器错误:“找不到符号构造函数..”?

时间:2010-11-30 21:42:54

标签: java inheritance constructor compiler-errors

我正在为员工,经理,每小时工作人员编写一个班级作业的代码,但我遇到了一个我无法弄清楚的问题,以下是我的员工代码,其后是小时工。问题是每小时工人不会编译,当我尝试编译时,它会给出“找不到符号构造函数员工”错误(员工类compiiles没有问题。请问有什么建议吗?我想我已经盯着它这么久了再也看不到了问题!谢谢.pieter。

员工人数 -

public class Employee
{
   public String firstName;
   public String lastName;
   public double hourlyRate;
   final static double NORMAL_WORKWEEK = 37.5;

   public Employee(String firstName, String lastName, double hourlyRate)
   {
       setFirstName(firstName);
       setLastName(lastName);
       setHourlyRate(hourlyRate);
    }
    //Accessor and Mutator Methods for the employee's first name.
    public String getFirstName()
    {
        return firstName;
    }

    public void setFirstName(String firstName)
    {
        firstName = firstName;
    }
   //Accessor and Mutator Methods for the employee's last name.
     public String getLastName()
    {
        return lastName;
    }

    public void setLastName(String lastName)
    {
        lastName = lastName;
    }
    //Access and Mutator Methods for the employee's hourly rate.
    public double getHourlyRate()
    {
        return hourlyRate;
    }
    public void setHourlyRate(double hourlyRate)
    {
    //If the user input is valid, update the employee's hour rate with the newly input value.

    if(hourlyRate > 0)
    {
      hourlyRate = hourlyRate;
        }
      //Otherwise prevent an hour rate greater than zero being overwritten 
        else if(hourlyRate <=0)
        {

   if(hourlyRate <= 0)
   {           
            hourlyRate = 0;
            }

  decorateConsole();

  //Alert the user to their mistake.
  System.out.println("Error ! ! ! - An attempt to set the employee " + this.firstName + " " + this.lastName + "'s hourly rate to zero was detected.\n");

  decorateConsole();

  }


 }

 public void printState()
 {

  decorateConsole();

  System.out.println("[FIRST NAME] = " + firstName + " [LAST NAME] = " + lastName + " [HOURLY RATE] = " + hourlyRate + "\n");

  decorateConsole();

 }

 public void decorateConsole()
 {

  System.out.println("+-< EMPLOYEE INFO >-------------------------------------------------------------------------------------------------------------------------+\n");

 }

每小时工作班级

public class HourlyWorker extends Employee
{
   private double wage;
   private double hours;

   public HourlyWorker(String firstName, String lastName, double hourlyWage, double hoursWorked)
   {
       super(firstName, lastName);
       this.wage = wage;
       this.hours = hours;
    }

    public void setWage (double hourlyWage)
    {
       this.wage = wage;
    }
    public void getWage()
    {
        return wage;
    }
    public void setHours (double hours)
    {
        this.hours = hours;
    }
    public double getHours()
    {
        return hours;
    }




}

10 个答案:

答案 0 :(得分:9)

您没有带有两个参数的Employee构造函数:

super(firstName, lastName);

尝试使用:

super(firstName, lastName, 0.0);
根据tony请求

编辑,这里有更详细的解释。

使用super(firstName, lastName);,您正在调用(尝试调用)具有两个字符串参数的类Employee中的构造函数。

回顾Employee类定义,我们看到你没有这样的构造函数,但是你有一个有三个参数:

public Employee(String firstName, String lastName, double hourlyRate)

因此,解决方案是调用该构造函数。由于您没有hourlyRate的默认值,我们可以使用0.0,这是一个双倍。

其他替代方法是在Employee

中创建一个两参数构造函数
public Employee(String firstName, String lastName )

答案 1 :(得分:4)

在HourlyWorker构造函数中,您试图像这样调用Employee构造函数:

super(firstName, lastName);

但是Employee类没有带有两个参数的构造函数。您需要传递第三个参数(小时费率),如下所示:

super(firstName, lastName, 42);

答案 2 :(得分:2)

HourlyWorker拨打电话

super(firstName, lastName);

但是Employee构造函数是

Employee(String, String, double)

签名不匹配。

编辑:顺便说一句,为什么HourlyWorker有私人wage成员?它(概念上)与Employee.hourlyRate有什么不同?

答案 3 :(得分:2)

在您的HourlyWorker类中,您使用两个参数调用Employee {super(firstname,lastname)}的构造函数,但在Employee类中,您没有任何带有两个参数的构造函数。

答案 4 :(得分:1)

你没有只带两个参数的超级构造函数。

答案 5 :(得分:1)

HourlyWorker的构造函数尝试调用super(firstName, lastName),但在父类中没有声明这样的构造函数。

答案 6 :(得分:1)

在您的HourlyWorker课程中,您有以下代码行:

super(firstName, lastName);

但是,您的员工类中没有匹配的构造函数。基本上,编译器会在您的员工类中查找类似......

的内容
public Employee(String firstName, String lastName)
{
   ...
}

定义一个新的构造函数,或使用你缺少的参数调用你定义的构造函数。

答案 7 :(得分:1)

您正在调用HourlyEmployee的基类构造函数(这是Employee的ctor),其中包含2个参数,而不是它想要的3个参数。

更改HourlyEmployee ctor中的行:

super(firstName, lastName);

super(firstName, lastName, hourlyWage);

答案 8 :(得分:1)

此外,如果你仍然想要一个像

这样的构造函数

public Employee(String firstName, String lastName) { ... }

并且您知道double hourlyRate的默认值,您可以尝试编写一个新的构造函数,如下一个:

`public Employee(String firstName,String lastName) {

     Employee(firstName, lastName, 0.0);

}`

答案 9 :(得分:0)

else if周围有一些可疑的东西。它重复了另一个if和一些花括号丢失。正确缩进代码并确保打开的卷曲与结束卷曲相匹配。

   if(hourlyRate > 0)
    {
      hourlyRate = hourlyRate;
        }
      //Otherwise prevent an hour rate greater than zero being overwritten 
        else if(hourlyRate <=0)
        {

   if(hourlyRate <= 0)
   {           
            hourlyRate = 0;
            }

  decorateConsole();

此外,这些行不会按预期工作(你有三行):

   firstName = firstName;

必须是:

   this.firstName = firstName;

就像你在第二堂课一样。