gpt4 book ai didi

当变量属于抽象父类时,Java 分派(dispatch)给子类

转载 作者:行者123 更新时间:2023-11-29 05:01:52 27 4
gpt4 key购买 nike

我有一个抽象父类 Parent 和六个子类 ChildA though ChildF

另一个类 Other 有六个(静态)重载方法 olmeth(),六个子类中的每一个。

我怎么写:

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

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

我怎样才能让 Java 根据 实际 类型的消息,而不是根据消息的引用 类型来分派(dispatch)?

最佳答案

Parent 中创建一个抽象方法,让每个子级分派(dispatch)给自己的 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() 的所有六个实现中的代码看起来完全相同,但这些方法实际上分派(dispatch)给 Other 的六个不同重载,因为静态类型this 在每种情况下都是不同的。

关于当变量属于抽象父类时,Java 分派(dispatch)给子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com