我正在为员工,经理,每小时工作人员编写一个班级作业的代码,但我遇到了一个我无法弄清楚的问题,以下是我的员工代码,其后是小时工。问题是每小时工人不会编译,当我尝试编译时,它会给出“找不到符号构造函数员工”错误(员工类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;
}
}
答案 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;
就像你在第二堂课一样。