在Java中使用isAssignableFrom()方法的匹配类

时间:2016-01-16 01:54:12

标签: java

我有一个名为Pet的抽象类,其中有许多类继承它。

public abstract class Animal {
}

public abstract class WildAnimal extends Animal {
}

public abstract class Pet extends Animal {
    public abstract void myNameIs();
}

public class Dog extends Pet {
    @Override
    public void myNameIs() {
        System.out.println("Dog Meat");
    }

    public void bark() {
        System.out.println("Woof");
    }
}

public class Cat extends Pet {
    @Override
    public void myNameIs() {
        System.out.println("Cheshire");
    }

    public void purr() {
        System.out.println("purr");
    }
}




// Somewhere else in my project ...

List<Animal> animals = new ArrayList<Animal>();
// Lots of animals are added to this by:

animalMoves(animals);

public void petMoves(List<Animal> animals) {
if (Pet.class.isAssignableFrom(animals.getClass())) {
    // Could be a dog, cat, mouse, etc.
    Pet something = (Pet)pet;

我希望能够为每个子类调用重写的myNameIs()方法,而不是抽象类“myNameIs()。我该怎么做?

1 个答案:

答案 0 :(得分:1)

您不需要isAssignableFrom检查:您的参数声明为类型Pet。显然,类Pet可以从类型为Pet的任何内容中分配,因此,您的检查将始终返回true。

要回答您的问题:pet.myNameIs()会按照您的要求行事。