有一个方法返回一个抽象类的实例和接受所有现有后代的重载方法。
AbstractClass getSuccessor() {
return ...;
}
void work(SonOfAbstract child);
void work(DaughterOfAbstract child);
void work(GrandchildOfAbstract child);
该方法getSuccessor()保证返回一个继承人AbstractClass,并且该方法work可以与所有继承人一起使用。
但是调用work(getSuccessor());没有按预期通过,因为方法work(AbstractClass child)没有定义。在真空中没有父母和球形孩子的工作。
如何将继承人传递给方法,并让 JRE 确定要调用的方法?
如果将方法作为
work抽象方法添加到AbstractClass. 然后为特定的继承者类实现它。这使得可以使用抽象类或接口来存储派生类的具体实现,并且不绑定到具体类型。此外,根据在运行时将使用哪种特定类型而不是接口,将使用多态性来确定。这种方法不仅可以让你摆脱类型绑定,还可以摆脱不必要的强制转换。
instanceof如您所知,使用和 此外进行类型检查if else if会减慢程序的速度。有些在丹麦王国腐烂。