出于培训目的,我正在创建Java项目,该项目将保存有关动物的信息。有一个抽象类Animals,其他类将会扩展。

我想创建一个食肉动物的界面,通常将任何动物作为参数:

    public interface Carnivorous {

        public void eatAnimal(Animal animal);
    //alternative way I have tried
        public <T extends Animal> void eatAnimal2( T animal);
    }


问题是在特定的实现中,我想将其范围缩小到扩展Animal的特定类:

public class Cat extends Animal implements Carnivorous {


public Cat(String name, int expierence, String meow) {
    super(name, expierence);
    this.meow = meow;
}

public String getMeow() {
    return meow;
}

public void setMeow(String meow) {
    this.meow = meow;
}

@Override
public String toString() {
    return "Cat [meow=" + meow + ", name=" + name + ", expierence=" + expierence + "]";
}

@Override
public void eatAnimal(Animal animal) {
    // TODO Auto-generated method stub

}

@Override
public <T extends Animal> void eatAnimal2(T animal) {
    // TODO Auto-generated method stub

}


在这种情况下,我只希望猫只吃老鼠。我不是可以吃东西,比如说斑马。

最佳答案

您可以在接口中使用泛型来帮助进行类型检查。

public static class Animal {

    public Animal() {
    }
}

public static class Rodent extends Animal {

    public Rodent() {
    }
}

public interface Carnivorous<A extends Animal> {

    public void eatAnimal(A animal);
}

public class Cat extends Animal implements Carnivorous<Rodent> {

    @Override
    public void eatAnimal(Rodent r) {
    }

}


在这里,我有一个Carnovorous Cat只吃Rodents

10-08 03:07