2012-02-10 65 views
0

我有一个类为什么我无法访问我的方法?

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(); 

我得到“无法找到符号”,它说,板[0]是一个BoardLocation。

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

回答

2
  • 你需要添加方法,.getRentAmt,以BoardLocation。也许让它成为一个界面。
  • 另一种选择是投板[0]到地块或物业,然后调用getRentAmt
+0

我试着铸造,它没有工作。我想让BoardLocation成为一个界面吗? – Mike 2012-02-10 07:12:13

+0

显示代码和你得到的错误。我会让boardlocation成为一个界面。 – Adrian 2012-02-10 13:05:27

1

该阵列元素的静态类型为BoardLocation。没有为此类型定义getRentAmt()。单个元素可能确实更加专业化,但通过超类引用,您只能使用超类型声明的方法。

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

+0

那么我该如何解决这个问题? – Mike 2012-02-10 06:10:05

1

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

+0

那么,有没有办法解决这个问题? – Mike 2012-02-10 06:11:12

+0

我编辑了我的答案,看看)) – shift66 2012-02-10 06:13:14

0

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

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

您的实际问题是OOP设计不良。尝试再次定义你正在尝试解决的问题并考虑使用接口。

+0

看看这个链接,它可能会让你更清楚: [link](http://www.codestyle.org/java/faq-Abstract.shtml) – gefrag 2012-02-10 06:25:06

相关问题