Java 分派到 child class 当变量是抽象的 parent class

Java dispatch to child class when variable is of abstract parent class

我有一个摘要 parent class Parent 和六个 child classes ChildA 虽然 ChildF.

另一个 class Other 有六个(静态)重载方法 olmeth(),六个 child classes.

怎么写:

Parent message = Factory.returnRandomChildClass();
Other.olmeth(message);

目前我使用了一个额外的方法,为 parent class 和六个 instanceof 检查重载来解决这个问题。这是不可扩展的。

如何让 Java 在 messageactual 类型上进行分派,而不是在 reference[ 的类型上分派=35=] 到消息?

使用double dispatch模式。为每个 Parent child class 实现 olmeth 逻辑并将当前的 olmeth 方法更改为:

 static void olmeth(Parent p) {
     p.olemth();
 }

Parent 中创建一个抽象方法,让每个 child 分派给自己的 static 重载:

abstract class Parent {
    protected abstract void send();
}
class ChildA extends Parent {
    protected void send() {
        Other.olmeth(this);
    }
}
class ChildB extends Parent {
    protected void send() {
        Other.olmeth(this);
    }
}
...
class ChildF extends Parent {
    protected void send() {
        Other.olmeth(this);
    }
}

请注意,尽管 send() 的所有六个实现中的代码看起来完全相同,但这些方法实际上分派给 Other 的六个不同重载,因为 this 的静态类型每种情况都不一样。