2014-02-23 37 views
0

我有一個非常具體的接口以及如何以及在哪裏實現各種東西的任務(用java編寫)。而且我知道很多類似的問題已經被問到,但我似乎無法將它們與我的問題聯繫起來。使用第二類方法中的第一類方法

I類必須實現是

public class Algorithm<G extends Game<M>, M extends Move> 
implements AIp<M> 

我不允許更改名稱。該類中的方法必須實現類G中的幾個方法。

G中實現的接口Game包含一些方法,如makeMove()evaluateSituation()(我們在這裏播放連接四)。

到目前爲止,我已經實現了從兩個接口在單獨類中的所有方法,並且我還創建了一個播放Board(class)。在G中,我創建了一個可以玩遊戲的棋盤對象。

所以我的問題是:我如何使用從類G,在我的方法的類Board(在Algorithm)的方法,而無需創建的Board一個新的對象(因爲我已經有)和/或G

編輯:

public class Algorithm<G extends Game<M>, M extends Move> implements AIp<M> { 

    G g; 

    public Algorithm(G g) { 
     this.g = g; 
    } 

    public someMethod() { 
     g.getBoard().someMethodFromBoard(); 
     // The line above gives the following error: 
     // The method getBoard() is undefined for the type G. 
     // 1 quick fix available: Add cast to 'g'. 
    } 


} 


     public class G { 
      public Board getBoard() { 
       return somelist; 
      } 
} 

someList沒有在遊戲中實現。

回答

1

據我瞭解你的概念,我認爲你可以簡單地在Game類中聲明Board對象的getter方法,並在G中實現它。

class G 
{ 
... 
    public Board getBoard() 
    { 
     return theBoardYouCreatedInG; 
    }  
} 

如果你已經有G對象,然後只提供它的Algorithm構造。然後你只需要使用G對象和它的getter方法得到Board對象

public class Algorithm<G extends Game<M>, M extends Move> implements AIp<M> 
{ 

    G g; 

    public Algorithm(G g) 
    { 
     this.g = g; 
    } 

    public someMethod() 
    { 
     g.someMethodFromG(); 
     g.getBoard().someMethodFromBoard(); 
    } 


} 

編輯: 如果你想用你的代碼這種方式,你需要getBoard()在Game實現。如果這是不可能的,那麼我想你將不得不在提供構造函數中提供Board對象稍後指定(在這種情況下,實現Game的任何類),如果要使用G的方法,則需要在Game中聲明它們。

+0

就是我在找的東西。非常感謝! – qwertz

+0

等待。我沒有G對象。我在G中創建了一個Board對象,因此使用g.getBoard()。someBoardMethod()不起作用。然而g.someMethodFromG()卻是。 – qwertz

+0

添加'G'對象不是一個選項,因爲該算法必須是通用的,而不是特定於'G'或遊戲連接四個。例如。你必須能夠玩它的tic tac腳趾。 – qwertz

相關問題