2012-02-10 148 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

相關問題