我認爲,以下是不能用Java完成的。但我很樂意學習如何實現類似的東西。事實之後實現接口
假設我們有一個C類,它已經在編譯代碼中使用了。 (我們既不能更改該代碼也不能更改C的原始定義)。
假設進一步有一些有趣的代碼可以被重用,如果只有C實現接口I的話。事實上,或多或少地推導D,這只是C +接口方法的實現。
然而,似乎沒有辦法,一旦我有一個C,說:我想你是一個d,就是實現一
(邊此言一C:我覺得演員(D)c,其中c的運行時類型爲C,如果D是C並且與C唯一的區別是添加了方法,那麼應該允許這應該是安全的,如果不是這樣,它應該是安全的)。災害?我知道工廠的設計模式,但這似乎並不是一種解決方案,因爲一旦我們在所有以前是C的地方設法創建D,其他人就會發現另一個接口J有用並且衍生出E擴展C實現了J.但是E和D是不兼容的,因爲它們都向C添加了一組不同的方法。所以雖然我們總是可以傳遞一個E來預期C,但是我們不能在期望D時傳遞E。相反,現在,我們需要一個新的類F擴展C實現I,J。)
爲什麼不簡單地「D類擴展C實現I」? – dfa 2009-04-15 15:04:54
,因爲它要麼用'new D(...)'而不是'new C(...)'來構建,這可能是不可能的。儘管D延伸C,也不可能做「D d =(D)C」。儘管如此,從D到C的向下應該是可能的。 – Alnitak 2009-04-15 15:14:56
我曾試圖解釋過。 我從不受我控制的代碼獲取C,並想將它們(不是新的/不同的對象)傳遞給與接口一起工作的代碼。 – Ingo 2009-04-15 15:17:00