Java - 无法从子类对象访问抽象方法

时间:2015-10-27 10:52:47

标签: java polymorphism abstract

我正在开发一个Java项目,我有一个名为Personnel的超类和两个子类; ManagerWorker

子类包含用于保存有关其工资的信息的单独变量,之前我有getSalary()的方法ManagergetWage()的{​​{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

我不确定这里出了什么问题,以为我已经涵盖了所有需要完成的事情。从我的代码提取中可以看出,该方法属于超类!

我真的不知道从哪里开始,任何正确方向的推动都会非常感激!

谢谢, 标记

2 个答案:

答案 0 :(得分:2)

您是否可以使用两个子类中的对象作为元素创建Personnel类的数组? 因为这本身会给你错误。 "无法将子类(Worker / Manager)转换为Personnel []。

如果适用于您,则问题与注释@Override有关。

答案 1 :(得分:-1)

当你创建一个抽象类方法时,你正在告诉JVM," Childs"来自这个"家长"将拥有这些方法,并将执行它们,或让他们的" Childs"执行它们。

Absctract类方法不能在自己中使用Objects细节,它们无法实例化。

工作人员经理(以及他们的"儿童")中都有getAnnualIncome()或者让该抽象类执行该方法。

要解决您的问题,请使用注释@Override通知Java 6+代码是合法的(虽然是可选的,这可能会有所帮助),并检查层次结构是否正确