【发布时间】:2010-10-19 14:46:53
【问题描述】:
我认为,以下不能在 Java 中完成。但我很乐意学习如何实现类似的东西。
假设我们有一个 C 类,它已经在编译代码中使用。 (我们既不能更改该代码也不能更改 C 的原始定义)。
进一步假设有一些有趣的代码可以重复使用,只要 C 实现接口 I。事实上,派生 D 或多或少是微不足道的,它只是 C + 接口方法的实现。
然而,似乎没有办法,一旦我有一个 C,就说:我希望你成为一个 D,即一个 C 实现 I。
(旁注:我认为如果 D 是 C 并且与 C 的唯一区别是添加的方法,则应该允许强制转换 (D)c,其中 c 的运行时类型是 C。这应该是安全的,不是吗? )
如何解决这场灾难?
(我知道工厂设计模式,但这似乎不是一个解决方案。因为,一旦我们设法在以前是 C 的所有地方创建 D,其他人发现另一个接口 J 有用并派生 E 扩展 C实现了 J。但是 E 和 D 是不兼容的,因为它们都向 C 添加了一组不同的方法。因此,虽然我们总是可以在期望 C 的地方传递 E,但我们不能在期望 D 的地方传递 E。而是,现在,我们需要一个新的类 F 扩展 C 实现 I,J。)
【问题讨论】:
标签: java design-patterns oop interface