[英]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.