我有一个名为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()
。我该怎么做?
答案 0 :(得分:1)
您不需要isAssignableFrom
检查:您的参数声明为类型Pet
。显然,类Pet
可以从类型为Pet
的任何内容中分配,因此,您的检查将始终返回true。
要回答您的问题:pet.myNameIs()
会按照您的要求行事。