簡體   English   中英

Java編譯器錯誤:“找不到符號構造函數..”?

[英]Java compiler error: “cannot find symbol constructor ..”?

我正在為班級分配的員工,經理,小時工編寫代碼,但是我遇到了一個我不知道的問題,以下是我為員工編寫的代碼,其次是小時工。 問題是小時工無法編譯,當我嘗試編譯時,它給出“找不到符號構造函數的雇員”錯誤(員工類完全沒有問題。請問任何建議嗎?我想我一直盯着它看了很久我看不到問題了,謝謝。

員工班-

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;
    }




}

您沒有具有兩個參數的Employee構造函數:

super(firstName, lastName);

嘗試使用:

super(firstName, lastName, 0.0);

根據Tony要求進行編輯 ,這是更詳細的說明。

使用super(firstName, lastName); 您正在調用(嘗試調用) Employee類中的構造函數,該構造函數具有兩個字符串參數。

回顧Employee類的定義,我們看到您沒有這樣的構造函數,但是您有一個帶有三個參數的構造函數:

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

因此,解決方案是改為調用該構造函數。 由於您沒有hourlyRate的默認值, hourlyRate我們可以使用0.0,它是雙hourlyRate值。

另一種選擇是在Employee類中創建一個兩個參數的構造函數

public Employee(String firstName, String lastName )

在HourlyWorker構造函數中,您嘗試像這樣調用Employee構造函數:

super(firstName, lastName);

但是Employee類沒有帶有兩個參數的構造函數。 您需要像這樣傳遞第三個參數(每小時費率):

super(firstName, lastName, 42);

HourlyWorker您致電

super(firstName, lastName);

但是Employee構造函數是

Employee(String, String, double)

簽名不匹配。

編輯:順便說一句,為什么HourlyWorker有私人wage成員? (與概念上)與Employee.hourlyRate有何不同?

在HourlyWorker類中,您正在使用兩個參數調用Employee {super(firstname,lastname)}的構造函數,但是在Employee類中,您沒有使用兩個參數的任何構造函數。

您沒有只接受兩個參數的超級構造函數。

HourlyWorker的構造函數嘗試調用super(firstName, lastName) ,但是在父類中沒有聲明這種構造函數。

在HourlyWorker類中,您具有以下代碼行:

super(firstName, lastName);

但是,您的員工類中沒有匹配的構造函數。 基本上,編譯器正在您的員工類中尋找類似...

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

定義一個新的構造函數,或使用缺少的參數調用您定義的構造函數。

您正在使用2個參數而不是它想要的3個參數來調用HourlyEmployee的基類構造函數(這是Employee的ctor)。

將HourlyEmployee ctor中的行從以下位置更改:

super(firstName, lastName);

super(firstName, lastName, hourlyWage);

另外,如果您仍想擁有類似

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

並且您從double hourlyRate知道了默認值,可以嘗試編寫一個類似於下一個的新構造函數:

`public Employee(String firstName,String lastName){

     Employee(firstName, lastName, 0.0);

}`

else if在這里, else if周圍會發生一些可疑的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;

就像您在第二節課上一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM