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 在 message
的 actual 类型上进行分派,而不是在 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
的静态类型每种情况都不一样。
我有一个摘要 parent class Parent
和六个 child classes ChildA
虽然 ChildF
.
另一个 class Other
有六个(静态)重载方法 olmeth()
,六个 child classes.
怎么写:
Parent message = Factory.returnRandomChildClass();
Other.olmeth(message);
目前我使用了一个额外的方法,为 parent class 和六个 instanceof
检查重载来解决这个问题。这是不可扩展的。
如何让 Java 在 message
的 actual 类型上进行分派,而不是在 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
的静态类型每种情况都不一样。