我正在設計一個框架,並在這個過程中遇到了一個有趣但很可能的基本問題。我有一個名爲的基類CoreEngine和其他兩個擴展它的類:CoreEngine1和CoreEngine2。我創建了一個接口,每個類都會實現這個接口,以增加項目的靈活性。但是,我遇到了一個問題...接口中我的方法的定義與每個繼承類中的定義不匹配!每個類必須實現以下方法:OOP正確使用AS3中的接口
function get avatar():AvatarBase;
的問題是,CoreEngine1和CoreEngine2期待一個不同類型的化身:
CoreEngine1
功能得到頭像():AvatarScaling
CoreEngine2
函數來獲取頭像():AvatarPlatform
正如你所看到的,在CoreEngine1和CoreEngine2 化身返回類型還不至於在接口中指定匹配類型。我希望既然AvatarScaling和AvatarPlatform都繼承了AvatarBase我不會遇到編譯問題。然而,這種情況並非如此。根據Adobe的文檔,類型必須與接口匹配。我試圖遵循面向對象編程的核心概念之一來擴展我的框架的靈活性:「編程到接口而不是實現」。我想到的第一件事是訪問器方法的返回類型應該是一個接口類型(也許我只是回答了我自己的問題)。
我確定這是其他人遇到過的常見問題。在架構上,您認爲解決此問題的最佳方法是什麼?提前致謝!
問候,
將
該代碼是不是AS3,你的意思是'無功CE1 :CoreEngine = new CoreEngine1(); var作爲:AvaterScaling = ce1.avatar()作爲AvatarScaling或者(AvatarScaling)(ce1.avatar())或者AvatarScaling(ce1.avatar());'。 – Taurayi
謝謝你的迴應。這很清楚並且合理。 –