gpt4 book ai didi

java - 使用继承时如何摆脱 instanceof 检查?

转载 作者:搜寻专家 更新时间:2023-11-01 01:25:04 27 4
gpt4 key购买 nike

假设我们有一个 Animal 类,其子类为 cat、eagle

现在我有一个方法:

public void process(Animal animal) {

if (animal instanceof Cat) {
if (!animal.meow()) {
throw exception("cat does not meow");
} else {
animal.feedFish();
}
}

if (animal instanceof eagle) {
if (!animal.fly()) {
throw exception("eagle does not fly");
} else {
animal.checkMaxFlightAltitude();
}
}
}

这里 cat 有 2 个方法 meowfeedfish这与鹰的方法完全不同 flycheckmaxflight

大多数设计模式都围绕子类具有公共(public)方法(如 Shape draw())的假设展开圈子继承draw和广场draw

  1. 有没有什么方法可以在没有 instanceof 检查的情况下对子类(例如 cat 和 eagle)进行验证?

  2. 任何好的设计模式(假设子类不共享基类中的方法?)

最佳答案

你可以在 Animal 中有一个抽象的 process 方法并在子类中实现它:

class Animal {
protected abstract void process();
public static void process(Animal a) { a.process(); }
}

class Cat {
void process() {
if (!meow()) throw exception("cat does not meow");
else feedFish();
}
public boolean meow() { ... }
public void feedFish() { ... }
}

关于java - 使用继承时如何摆脱 instanceof 检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398227/

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