ski*_*kip 8 java inheritance design-patterns interface
我正在编码接口.
我有一个接口A和一个实现它的B类.
有人告诉我,我可以覆盖B的通过扩展它的功能Ç但我问摸既不乙也不Ç,再后来代替乙与ç作为实现类的一个在配置文件中.
我想,我需要的,是不是在使用方法一,所以我需要一个方法添加到一个我能在实现Ç.但我不准碰一个.
有人可以帮助我完成它吗?
谢谢.
编辑: 示例代码:
A.java
public interface A {
void X();
void Y();
}
Run Code Online (Sandbox Code Playgroud)
B.java
public class B implements A {
public void X() {//something interesting}
public void Y() {//something not very interesting}
}
Run Code Online (Sandbox Code Playgroud)
现在因为我不被允许触摸任何一个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}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要另一种方法 void Z()在C.java做我的事,但因为我编码的接口A,如果我只是添加了一个方法C.java同时使用A's引用变量我不能打电话Z(),所以我必须声明void Z()的A接口很好地使用它,但如果我这样做,我将不得不触摸A我不被允许.因此,如何解决这个问题是我一直想要问的问题.
基本上,我不能做以下事情:
A a = new C();
a.Z(); //can't do this
Run Code Online (Sandbox Code Playgroud)
那么有没有办法让我在不触及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();
Run Code Online (Sandbox Code Playgroud)
如果这是你想要的,那么恐怕无法做到.任何与之合作的人都A知道定义的方法A; 他们不会知道你someNewMethod()在课堂上定义的C.你需要被允许改变A.
请注意,在extremis中,您可以检查以下实例的类类型A:
A foo;
// ...
if (foo instanceof C) {
((C) foo).someNewMethod();
}
Run Code Online (Sandbox Code Playgroud)
但这真的很难看,打破了OO编程的许多基本规则.
| 归档时间: |
|
| 查看次数: |
19791 次 |
| 最近记录: |