Kri*_*ket 2 java oop polymorphism
假设我有以下课程:
public interface X {
...
}
public class A implements X {
...
}
public class B implements X {
...
}
Run Code Online (Sandbox Code Playgroud)
现在让我说我有一个方法,它采用X类型的对象,并且必须以不同方式处理X的每个实现.天真的做法是:
public void doSomething(X x) {
if(x instanceof A)
doSomethingA((A) x);
else if(x instanceof B)
doSomethingB((B) x);
}
Run Code Online (Sandbox Code Playgroud)
......但这看起来特别难看,而且不是多态的.一般来说处理这种情况的干净方法是什么?
编辑:当然,如果我可以将doSomething()的实现推送到A类和B类,那将会很容易,但在那些没有意义的情况下呢?即doSomething()是在C类上定义的,并且实现高度依赖于C的内部状态.
这很简单:
public interface X {
int doSomething();
}
public class A implements X {
public int doSomething() {
// implementation in A
}
}
public class B implements X {
public int doSomething() {
// implementation in B
}
}
Run Code Online (Sandbox Code Playgroud)
更新:好的,似乎在这里我们在C中有一些算法,它依赖于C的状态以及A/B的差异.然后我会尝试拆分该算法,以便C类只有A和B的通用实现,并且A/B相关的部分应该作为在C中调用的相同方法的特定实现转到适当的类.如果可能的话,C的状态可以部分传递给A和B的doSomething
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |