我有一个班级
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。
这可能是什么原因?或任何修复?
答案 0 :(得分:2)
答案 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设计不佳。尝试再次定义您要解决的问题,并考虑使用界面。