Java:从超类列表中获取子类
我是java新手,对以下代码有两个问题:Java:从超类列表中获取子类,java,subclass,superclass,Java,Subclass,Superclass,我是java新手,对以下代码有两个问题: class Animal { } class Dog extends Animal { } class Cat extends Animal { } class Rat extends Animal { } class Main { List<Animal> animals = new ArrayList<Animal>(); public void main(String[] args) { animals.
class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }
class Rat extends Animal { }
class Main {
List<Animal> animals = new ArrayList<Animal>();
public void main(String[] args) {
animals.add(new Dog());
animals.add(new Rat());
animals.add(new Dog());
animals.add(new Cat());
animals.add(new Rat());
animals.add(new Cat());
List<Animal> cats = getCertainAnimals( /*some parameter specifying that i want only the cat instances*/ );
}
}
类动物{}
类狗扩展动物{}
类Cat扩展了动物{}
类老鼠扩展动物{}
班长{
列出动物=新建ArrayList();
公共void main(字符串[]参数){
添加(新狗());
添加(新鼠());
添加(新狗());
添加(新的Cat());
添加(新鼠());
添加(新的Cat());
List cats=getCertainAnimals(/*一些参数指定我只需要cat实例*/);
}
}
1) 有没有办法从Aminal列表中获取狗或猫的实例?
2) 如果是,我应该如何正确构建getCertainAnimals方法
Animal a = animals.get(i);
if (a instanceof Cat)
{
Cat c = (Cat) a;
}
else if (a instanceof Dog)
{
Dog d = (Dog) a;
}
注意:如果您不使用
instanceof
,它将编译,但它也允许您将a
投射到Cat
或狗
,即使a
是老鼠
。尽管进行了编译,但在运行时仍会得到一个ClassCastException
。因此,请确保使用instanceof
您可以执行以下操作
List<Animal> animalList = new ArrayList<Animal>();
animalList.add(new Dog());
animalList.add(new Cat());
for(Animal animal : animalList) {
if(animal instanceof Dog) {
System.out.println("Animal is a Dog");
}
else if(animal instanceof Cat) {;
System.out.println("Animal is a Cat");
}
else {
System.out.println("Not a known animal." + animal.getClass() + " must extend class Animal");
}
}
在这两种情况下,您将获得如下输出:
Animal is a Dog
Animal is a Cat
基本上两者都做相同的事情。只是为了让您更好地理解。使用instanceof运算符。使用instanceof()来获取类的类型:)谢谢,它帮了我很多忙!没问题。欢迎来到SO。你应该坐飞机。
Animal is a Dog
Animal is a Cat