簡體   English   中英

為什么我無法訪問我的方法?

[英]Why can't I access my method?

我有一堂課

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。

有什么原因嗎? 或任何修復?

  • 您需要將該方法.getRentAmt添加到BoardLocation。 也許使其成為一個接口。
  • 另一種選擇是將板[0]投射到地塊或財產,然后調用getRentAmt

數組元素的靜態類型為BoardLocation 沒有為此類型定義getRentAmt() 各個元素的確可能更專門,但是通過超類引用,您只能使用在超類型上聲明的方法。

如果需要編譯時訪問此方法,則該數組要么需要更特殊的類型( Property[] ),要么該方法需要移入超類。 如果您包含更多信息,則可能會出現其他選項。

因為在BoardLocation類中未聲明getRentAmt()方法。 您的元素類型是BoardLocation並且編譯器不知道數組中確實存在Lot 編譯器知道您有一個BoardLocation數組,如果要使用getRentAmt()方法,則必須在BoardLocation聲明它,然后在繼承的類中重寫它。

BoardLocation不知道在Property中聲明的方法! 嘗試:

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

您的實際問題是糟糕的OOP設計。 嘗試再次定義您要解決的問題,並考慮使用接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM