2013-04-29 44 views
0

今天我迷上了Java多態。我做了一些我認爲不可能的事情。即 - 我有EXTENDED界面。爲什麼任何類型的EXTENDS接口?

我已經創建了空接口:

public interface Figure {} 

沒有新的現在。然後我用參數創建了參數化類板,擴展了我的界面!

public class Board< T extends Figure > { 
    T[][] board; 
} 

我認爲這是不可能的!不過,我還沒有理解就進一步去了。

我已經創建的類實現圖形界面:

public class Cross implements Figure{} 

和我的驚喜,我能夠做到這一點:

Board b = new Board<Cross>(); 

請幫我解釋一下我這個奇怪的情況。
我知道一點關於多態性,我知道十字架是圖。 我很困惑,任何類型如何能夠EXTEND接口,以及如何實現接口(不擴展接口)的類作爲擴展接口的參數是正確的。

請幫我解釋一下這個多態混亂。謝謝。

+0

那麼,有可能另一個接口擴展另一個接口..所以'T擴展圖'可能檢查T是一個接口類型..但由於類型刪除我不確定 – 2013-04-29 07:14:12

回答

1

當你說public class Board< T extends Figure >,這意味着董事會可以接受FigureFigure的子接口或任何實現這些接口的類。所以,當你說:

public class Cross implements Figure{} 

Board b = new Board<Cross>(); 

這意味着跨已實施Figure,從而Board可以接受Cross,因爲Cross IS-A Figure

至於延長就接口而言,只有接口可以擴展接口。所以,以下是合法的:

public interface TwoDimensionalFigure extends Figure{}. 

所以它實現TwoDimensionalFigure任何類也可以通過Board接受。

1

這樣做

public class Board< T extends Figure > { 
    T[][] board; 
} 

您正在創建一個有界泛型類型,T它應該有它超類Figure

this線程解釋的,有沒有什麼區別定義一個通用類型,其中延伸接口

確保讓什麼編譯的是,當你創建BoardT將與任何extends Figureimplements Figure

0

Actully你沒有擴展接口的具體類提供。您只需創建一個類型爲Cross的泛型類。您的類的定義只是指定參數化類型必須從圖派生,即實現圖或其派生。

相關問題