我有一个抽象类Animal
,有两个扩展类,Dog
和Cat
.
public abstract class Animal {
...
}
public class Dog extends Animal {
...
}
public class Cat extends Animal {
...
}
在另一个类中,我有一个ArrayList<Animal> animals
包含Cat
和的实例Dog
。
在带有 的类中ArrayList<Animal>
,我希望能够使用或作为参数重载方法doSomething()
,Dog d
但Cat c
仍然能够从 Animals 的 ArrayList 中调用它们。如下:
public void aMethod(){
ArrayList<Animals> animals = getTheAnimals();
for (Animal a : animals){
doSomething(a);
}
}
public void doSomething(Dog a){
//a is an object of type dog
}
public void doSomething(Cat a){
//a is an object of type cat
}
从本质上讲,每种方法都充当type
该方法接收动物的“选择器”。
如上所述尝试时,出现以下编译错误:
错误:找不到适合 doSomething(Animal) 的方法
我知道我可以使用类似的东西instanceOf
or a.getClass().equals(type)
,但我已经读到这是不好的做法。这个问题与其他问题略有不同,因为我想要两个单独的方法,每个方法都有不同的参数。
编辑:我将避免使用访问者模式,因为我认为它不太适合我的实际实现。将 doSomething() 方法移动到每个类中,并进行重构以确保这具有逻辑意义(每个类都执行它应该负责的操作)。谢谢。