我对以下案例有疑问。我有家庭
class Animal,
和两个儿童班Dog
和Cat
。 Dog
有bark()
方法,Cat有meow()
方法。在主类中,我有List<Animal>
,其中包含狗和猫。我希望列表中的每只狗都使用方法.bark()
。我知道我可以通过使用来做到这一点
for (Animal animal : listOfAnimals) {
if(animal instanceOf Dog) {
((Dog)animal).bark()
}
}
但是是否可以在
Animal, Dog, Cat
类中使用泛型,以便不使用缩小范围,但编译器会自动知道特定动物是 Cat or Dog
的类型(我的意思是我想使用 animal.bark()
)?
class Animal {
private String name;
public Animal(String name){
this.name = name;
}
}
class Dog extends Animal{
public Dog(String name){
super(name);
}
public void bark() {
System.out.println("Woof!");
}
}
class Cat extends Animal{
public Cat(String name) {
super(name);
}
public void meow() {
System.out.println("Meow!");
}
}
public class Main {public static void main(String[] args) {
List<Animal> listOfAnimals = new ArrayList<>;
listOfAnimals.add(new Dog("Buddy"));
listOfAnimals .add(new Cat("Whiskers"));
listOfAnimals .add(new Dog("Max"));
for (Animal animal : listOfAnimals) {
((dog)animals).bark;
}
}
从我的角度来看,你可以:
bark()
中将 Animal
方法实现为无操作(不执行任何操作),并且仅在 Dog
sFish
。