为什么我不能访问我的方法?

时间:2012-02-10 06:06:21

标签: java inheritance abstract

我有一个班级

public abstract class BoardLocation 
{
   //...
}

和另一个......

public abstract class Property extends BoardLocation
{
   public abstract int getRentAmt(); 
}

最后,另一个......

public class Lot extends Property
{
    @Override
    public int getRentAmt()
    {
        //...
    }
}

在我的Driver.java中,我正在做...

BoardLocation board[] = new BoardLocation[2];
board[0] = new Lot();
board[1] = new Lot();

但是当我试着打电话时......

board[0].getRentAmt();

我得到“无法找到符号”,并且它表示Board [0]是BoardLocation。

这可能是什么原因?或任何修复?

5 个答案:

答案 0 :(得分:2)

  • 您需要将该方法.getRentAmt添加到BoardLocation。也许让它成为一个界面。
  • 另一种选择是将棋盘[0]转换为Lot或Property,然后调用getRentAmt

答案 1 :(得分:1)

数组元素的静态类型是BoardLocation。此类型未定义getRentAmt()。单个元素可能确实更专业,但是通过超类引用,您将被限制为在超类型上声明的方法。

如果您需要编译时访问此方法,则该数组需要是更专业的类型(Property[]),否则该方法需要移入超类。如果您包含更多信息,可能会出现其他选项。

答案 2 :(得分:1)

因为getRentAmt()类中未声明BoardLocation方法。您的元素类型为BoardLocation,编译器不知道您的数组中实际存在Lot个。编译器知道你有一个BoardLocation数组,如果你想使用getRentAmt()方法,你必须在BoardLocation中声明它,然后在继承的类中覆盖它。

答案 3 :(得分:0)

BoardLocation不知道在Property中声明的方法! 尝试:

Property board[] = new Property[2];
board[0] = new Lot();
board[1] = new Lot();

答案 4 :(得分:0)

你的实际问题是OOP设计不佳。尝试再次定义您要解决的问题,并考虑使用界面。