java我的继承有问题
这周我正在练习Java继承。我的任务是设计一个计算员工年薪的小程序。这项任务要求我:
- 使类Employee实现接口李>
- 在Employee类中定义getGrossalary()方法。假设总工资等于以下等式:基本工资+全职奖金(基本工资=40000美元/年) 雇佣时间奖金=$1000/年雇佣
- 在Employee类中定义getNetSalary()方法。假设净工资等于以下等式:总工资-(总工资*税率)
- 应通过调用接口Taxes中的getTaxRate()静态方法来获取税率李>
- 创建从类Employee继承的子类管理器。重写getBonus()方法,这样每位经理都可以在工作时间奖金的基础上额外获得10000美元李>
一切正常,但当我试图让Manager继承其超类Employee时,程序出错了!即使我试图在互联网上找到问题,或者问我的一些朋友,我也无法解决这个问题
这是我的员工。java代码:
public class Employee implements Taxes {
private double baseSalary = 40000;
int years;
private double grossSalary;
private double netSalary;
public Employee(int years) {
this.years = years;
}
public double getGrossSalary() {
grossSalary = baseSalary + getBonus();
return grossSalary;
}
public double getNetSalary() {
netSalary = grossSalary - grossSalary * getTaxRate(grossSalary);
return netSalary;
}
public double getBonus() {
return years*1000;
}
public static double getTaxRate(double grossSalary) {
if (grossSalary < 10000 ) {
return 0.05;
} else if (grossSalary >= 10000 && grossSalary < 20000) {
return 0.07;
} else if (grossSalary >= 20000 && grossSalary < 50000) {
return 0.10;
} else {
return 0.15;
}
}
}
这是我的经理。java代码,出现错误“类Employee中的构造函数Employee无法应用于给定类型”:
public class Manager extends Employee {
public Manager( int years ) {
this.years = years;
}
public double getBonus() {
return years*10000;
}
}
# 1 楼答案
您有两种解决方案:
1-在Employee类上创建一个默认构造函数,因为如果不在子类中指定构造函数,编译器将搜索默认构造函数,但它不存在
2-或者您可以调用超级类中的自定义构造函数:
# 2 楼答案
如果您确实显式地指定了构造函数(如在Employee with parameter中),Java编译器将不会为您创建无参数构造函数。因此需要显式调用基类构造函数
# 3 楼答案
超级构造函数必须在类的每个构造函数(或通过
this(...)
调用类的另一个构造函数)中调用。如果不调用特定的构造函数,编译器将添加默认构造函数。 但是没有默认的Employee()
construcor,因此您会得到错误。将Manager
构造函数更改为# 4 楼答案
我不是那个么喜欢java的人,但你们在Employee类上并没有默认构造函数,如何支持init基类
据我所知,你应该有
# 5 楼答案
在类
Manager
的构造函数中,必须确保调用了其超类Employee
的相应构造函数。您可以通过使用super(...)
来实现这一点:如果不指定此项,Java将尝试调用不带参数的类
Employee
的构造函数。由于类Employee
没有不带参数的构造函数,正如您所注意到的,这将失败请参阅Oracle Java教程中的:Using the Keyword ^{}