我有一个抽象的父类Parent
和六个子类ChildA
虽然ChildF
。
另一个类Other
有六个(静态)重载方法olmeth()
,六个子类中的每一个都有一个。
我怎么写:
Parent message = Factory.returnRandomChildClass();
Other.olmeth(message);
目前我使用额外的方法,为父类重载,并进行六次instanceof
检查以解决此问题。这是不可扩展的。
如何让Java在实际类型的message
上发送,而不是在消息的引用的类型上发送?
答案 0 :(得分:2)
在Parent
中创建一个抽象方法,让每个孩子调度到自己的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
的静态类型情况不同。
答案 1 :(得分:1)
使用double dispatch模式。为每个olmeth
子类实施Parent
逻辑,并将当前的olmeth
方法更改为:
static void olmeth(Parent p) {
p.olemth();
}