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