如何根据子类类型调用java方法?

pin*_*pin 8 java oop polymorphism

我正在尝试根据子类将对象分派给单独的方法.

例如,考虑这两个对象

class A extends I {}
class B extends I {}
Run Code Online (Sandbox Code Playgroud)

和方法

void dispatch(I i) {}
Run Code Online (Sandbox Code Playgroud)

dispatch(),我想根据类型调用一个方法i.因此,如果i实际上是类型A,handlerA(A a)则将调用该方法.如果它是B类型,handlerB(B b)将被调用,依此类推......我试过方法重载但是我猜它不会这样工作

实现这一目标的最佳方法是什么?我想避免使用if/else语句......

提前致谢,

编辑:我不能修改任何这些类.

Kev*_*ose 5

使用访问者模式

总之,有I声明一个accept(Visitor<T> ...)方法,和具有Visitor暴露onA(A ...)onB(B ...)等等的方法。您的I接口实现将在传入的Visitor<T>.

如果你只有 2 个具体的类,它可能不值得(由于样板),但是大约 3 或 4 个它开始值得 - 如果只是为了避免重复的 if-else 构造。


Noo*_*ilk 3

因此,I您声明该方法,并在和handler()中适当地(即不同地)实现它。AB

这就是多态性:)