繁体   English   中英

正确的管理继承的方法

[英]Correct way to manage inheritance

目前我的代码如下:

public void processAnimal(Animal a){
    if (a instanceof Cat){
        processCat((Cat)a);
    } else if (a instanceof Dog){
        processDog((Dog)a);
    } else if (a instanceof Bird){
        processBird((Bird)a);
    }
}

public void processCat(Cat c){
    ...
}

public void processDog(Dog d){
    ...
}

public void processBird(Bird b){
    ...
}

有没有办法摆脱的样板if报表?


更新:我有一组模型,可以在不同的位置进行不同的处理。 想象一下,这些都是宠物。 一家宠物店可能想要让猫与其他猫交互,并且狗与其他狗互动,而家里可能想要在同一地点养狗和猫。

所以每个模型都不知道如何在给定的情况下进行交互。

您可以在Animal每个子类中定义processAnimal方法,然后通过animal.processAnimal()调用它。 根据animal对象的确切类别,将调用正确的方法。

ArrayList<Animal> animals = new ArrayList<Animal>();
animals.add(new Dog());
animals.add(new Cat());
animals.add(new Bird());

for (Animal animal : animals) {
    animal.processAnimal();  // appropriate method for each object will be called
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM