我正在开发一个Java项目,我有一个名为Personnel
的超类和两个子类; Manager
和Worker
。
子类包含用于保存有关其工资的信息的单独变量,之前我有getSalary()
的方法Manager
和getWage()
的{{1}}。但是,我希望通过for循环可以访问其中的一些,因此我将一个抽象方法放入名为Worker
的{{1}}类中,并将相应的方法放入两个子类中:
Personnel
在getAnnualIncome()
:
public abstract class Personnel
{
//attributes of each instance of class
protected String name;
protected int payrollNum;
protected String dept;
//abstract method to be defined in subclasses
public abstract float getAnnualIncome();
}
在Manager
:
public float getAnnualIncome()
{
//convert salary variable to real number
float salaryAsFloat = salary;
//return real number
return salaryAsFloat;
}
这在理论上一切正常,但是当我实际实现我提到的for循环时(使用两个子类中的对象作为元素的Worker
类的数组),下面的一段代码做了无法识别public float getAnnualIncome()
{
//number of weeks in a year as constant value
final int weeksInYear = 52;
//weekly wage by number of weeks in a year
return ((hourlyRate * hoursPerWeek) * weeksInYear);
}
方法(这取自可执行主类):
Personnel
我不确定这里出了什么问题,以为我已经涵盖了所有需要完成的事情。从我的代码提取中可以看出,该方法属于超类!
我真的不知道从哪里开始,任何正确方向的推动都会非常感激!
谢谢, 标记
答案 0 :(得分:2)
您是否可以使用两个子类中的对象作为元素创建Personnel类的数组? 因为这本身会给你错误。 "无法将子类(Worker / Manager)转换为Personnel []。
如果适用于您,则问题与注释@Override有关。
答案 1 :(得分:-1)
当你创建一个抽象类方法时,你正在告诉JVM," Childs"来自这个"家长"将拥有这些方法,并将执行它们,或让他们的" Childs"执行它们。
Absctract类方法不能在自己中使用Objects细节,它们无法实例化。
在工作人员和经理(以及他们的"儿童")中都有getAnnualIncome()
或者让该抽象类执行该方法。
要解决您的问题,请使用注释@Override通知Java 6+代码是合法的(虽然是可选的,这可能会有所帮助),并检查层次结构是否正确