【发布时间】:2012-09-01 22:47:10
【问题描述】:
我正在编写接口代码。
我有一个接口 A 和一个实现它的类 B。
我被告知我可以通过 C 扩展来覆盖 B 的 功能,但我被要求既不碰 B 也不碰 C,然后在配置文件中将B替换为C作为A的实现类。
我想我需要一个 A 中没有的方法,所以我需要向 A 添加一个我可以在 C。但是我不能碰A。
有人可以帮我解决怎么做吗?
谢谢。
编辑: 示例代码:
A.java
public interface A {
void X();
void Y();
}
B.java
public class B implements A {
public void X() {//something interesting}
public void Y() {//something not very interesting}
}
现在因为不允许我触摸 A 或 B 我不得不编写另一个类 C 并将其从 B 扩展来做我的事情。
C.java
public class C extends B {
public void Y() {//overriding B's not very interesting Y and making it interesting}
}
现在我需要 C.java 中的另一个方法 void Z() 来做我的事情,但是因为如果我在 C.java 在使用A's 引用变量时,我将无法调用Z(),所以我必须在A 接口中声明void Z() 才能像那样使用它,但如果我这样做,我将不得不触摸A,我不允许这样做。所以如何解决这个问题是我一直想问的。
所以本质上,我将无法执行以下操作:
A a = new C();
a.Z(); //can't do this
那么我有什么方法可以在不触及 A 或 B 的情况下实现类似的目标?
【问题讨论】:
-
你的意思是:既不碰A也不碰B
-
加:为什么你不能有一个不在界面中的方法?这不是 Objective-C!
-
是的,我知道这在 ObjC 中也是可能的,但在那里更常见。
-
你不能碰 A、B 或 C,必须用 C 的 A 实现替换 B?这是不可能的,除非您可以更改 C 或将 C 扩展到 D 并将 B 替换为 D 的新实现。您不能在接口 A 之外添加新方法并期望它被 A 接口的默认使用者使用。
-
好的,但你到底是什么意思?
标签: java design-patterns inheritance interface