Java泛型而不是典型情况下的缩小

问题描述 投票:0回答:1

我对以下案例有疑问。我有家庭

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;
    }
}
java oop generics inheritance
1个回答
1
投票

从我的角度来看,你可以:

  • 在所有
    bark()
    中将
    Animal
    方法实现为无操作(不执行任何操作),并且仅在
    Dog
    s
  • 中被覆盖
  • 但是,任何人都可以覆盖该方法,然后你就可以拥有一个会吠叫的
    Fish
© www.soinside.com 2019 - 2024. All rights reserved.