我正在为界面编码。
我有一个接口(interface) A 和一个实现它的类 B。
我被告知我可以通过C 扩展B 的功能来覆盖它,但我被要求既不接触B 也不接触 C,然后在配置文件中将B替换为C作为A的实现类。
我认为我需要一个在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()
来完成我的工作,但是因为我正在编码接口(interface) A
如果我在 C.java 上添加了一个方法,同时使用 A 的
引用变量我将无法调用 Z()
所以我将不得不在 A
接口(interface)中声明 void Z()
并像那样使用它,但如果我这样做,我将不得不触摸 A
我是不被允许。那么如何解决这个问题是我一直想问的。
所以基本上,我将无法执行以下操作:
A a = new C();
a.Z(); //can't do this
那么有什么方法可以让我在不触及 A 或 B 的情况下实现类似的目标吗?
最佳答案
我想我明白你想要什么。你有以下内容:
public interface A {
// can't touch this
}
public class B implements A {
// can't touch this
}
public class C extends B {
// you want to add your own method
void someNewMethod();
}
// And you wish to do this:
A foo = new C();
foo.someNewMethod();
如果这是你想要的,那恐怕是做不到的。使用A
的任何人都只知道A
中定义的方法;他们不会知道您在类 C
中定义了 someNewMethod()
。您需要被允许更改 A
。
请注意,在极端情况下,您可以检查 A
实例的类类型:
A foo;
// ...
if (foo instanceof C) {
((C) foo).someNewMethod();
}
但这真的很丑并且违反了 OO 编程的许多基本规则。
关于java - 如何扩展接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328475/