我认为,以下是不能用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