2012-11-14 260 views
0

請參考後指定接口ICellRenderer的: Display checkbox inside Flash List Control ? (Similar to itemrendering in Flex)有什麼用在這種情況下

像往常一樣,我總是得到與接口的意義有些困惑。

所以在上面的鏈接,我還是不明白什麼是指定ICellRenderer

爲什麼可以不替代的意義:

public class CustomCellRenderer extends CheckBox implements ICellRenderer 

我可以寫

public class CustomCellRenderer extends CheckBox 

我試圖玩上面的線,但它不工作。我必須指定ICellRenderer。

在我看來,接口,只是告訴一個類遵循一定的使用函數的規則。它如何能夠阻止班級的工作(如果我已經使用了所有必要的功能,但沒有實現所需的接口)

Thnx提前。 Vishwas。

回答

1

由於檢查對象上的其他代碼沒有實現接口,可能會導致失敗。然而這也是接口的優點,你的類不需要從某個東西延伸來實現一個接口,所以它可以任意擴展任何類,但實現一個特定的接口,這意味着它具有一些其他功能從它的繼承鏈中獲得。所以的Adobe(或任何人)代碼的東西像:

if(argumentObject is ICellRenderer) 
{ 
    var icr:ICellRenderer = argumentObject as ICellRenderer; //cast so code completion can work 
    icr.data = data; //do some stuff on the object that only an ICellRenderer can do 
} 

讓我知道,如果這種解釋是不明確的,我花了很長的時間來與接口及其使用交手,但現在我一個巨大的倡導者。

論據

只要繼承本身而言,只是爲了清晰的概念是,如果事情就像別的東西,但與它相關聯的額外的屬性(名詞)或行動(動詞),你不需要重新編寫通用部分。

要使用一個常見的例子說你有一個類動物(屬性如isAlive,行爲如重現)。現在說你想爲SexualAnimal和AsexualAnimal創建一個類,並且在SexualAnimal的重現方法需要一個參數,而AsexualAnimal的重做方法不會(SexualAnimal會有重載方法的重載版本,並且會覆蓋默認的拋出錯誤)。好吧,現在我們已經到達鳥類的某個地方,現在我們可以選擇如何處理航班,我們可以在繼承鏈中添加航班作爲布爾值,或者B創建航班界面(也許我們並不關心遺傳樹中的哪一個動物,我們只是想知道它可以飛行,因此具有某些屬性,如高度和像takeFlight一樣的動作)。而不是檢查你想要在飛行物上使用的每個單獨的財產,你可以檢查是IFlyingThing。

另一種看待這個問題的方法是,作爲一名程序員,我可以編寫一個接口給另一個團隊,我們都可以根據接口中建立的「契約」進行操作。比如說我需要訪問一個數據庫來完成一些操作,但我不知道哪個數據庫解決方案會長期執行。因此,我爲我需要的數據庫編寫接口,以便能夠使用X參數獲取Y數據,現在,我可以自由地在我提供X的假設下自由編寫其餘代碼,並且您給我Y,不管是什麼我的代碼的基礎實現將起作用。

爲了更正式引用的接口的用途看:http://en.wikipedia.org/wiki/Design_Patterns

+0

如果這樣的檢查是不存在的。不是完全可以避免的接口? 例如,「繼承」的概念也是可以避免的,但是它們的優點可以被看作是「乾淨的」代碼生成。 但是,在「接口」的情況下,它在我看來都不是一個乾淨的代碼。它只是「強制」一條規則,以便編譯器可以在編譯時停止。 (因此,程序員必須糾正錯誤,並做出成功的編譯) –

相關問題