【发布时间】:2016-01-28 17:35:30
【问题描述】:
所以我有以下接口I,它由A 和B 类实现:
interface I { ... }
class A implements I { ... }
class B implements I { ... }
然后我有另一个接口OverrideMe,其方法有一个对象I作为参数,以及一个覆盖该方法并根据该参数的实际类表现不同的类:
interface OverrideMe {
void method(I parameter)
}
class Overriding implements OverrideMe {
@Override
void method(I parameter) {
if (I instanceof A) {
// Code block for A
}
else if (I instanceof B) {
// Code block for B
}
}
}
有没有办法在不使用instanceof 的情况下按类型区分这两个代码块?我不确定这是否可以使用继承来完成。
请记住,我无法控制 I、A、B 和 ,我必须按原样使用它们。
【问题讨论】:
-
你为什么不想这样做?
-
如果你想调用一个A和B都实现的方法,你不需要那个区分,动态方法查找就可以解决这个问题。例如,如果你想调用一个只有 B 实现的方法,那么你当然需要这样做(但只针对 B)。
-
我不想这样做,因为显然“...最好避免在一系列 if/else 语句中使用 instanceof 运算符来根据类型区分代码块,如果这些类型通过继承相关,在基类中定义一个方法,并在这些类中使用重写的方法更简洁......”。
标签: java inheritance overriding instanceof