public class Test { public static void main(String[] args) { //定义动物数组存储若干狗和猫对象 Animal[] as = new Animal[]{new Dog("pluto"), new Cat("Tom"), new Dog("Snoopy"), new Cat("Garfield")}; Dog[] dogs = getAllDog(as); for (int i = 0; i < dogs.length; i++) { System.out.println(dogs[i].getName()); } } //将动物数组中所有的狗存储在dog数组中进行返回 public static Dog[] getAllDog(Animal[] as) { // 统计 Dog 的个数 int sumDog = 0; for (int i = 0; i < as.length; i++) { //循环遍历得到动物数组中每一个元素,判断当前元素是否是Dog类型 if (as[i] instanceof Dog) { //如果是狗统计变量+1 sumDog++; } } // 创建 Dog 数组,统计变量就是狗的数量,使用sumDog作为狗数组的长度 Dog[] dogs = new Dog[sumDog]; //定义下标 int dogIndex = 0; for (int i = 0; i < as.length; i++) { //重新遍历动物数组找到dog对象 if (as[i] instanceof Dog) { //将dog对象存储在dog数组中 dogs[dogIndex] = (Dog) as[i]; //第一次存储下标是0,每次存储成功后下标加1,指向下一个数组空间 dogIndex++; } } return dogs; } } //动物类 class Animal { //属性私有提供set/get private String name;//名称 public String getName() { return name; } public void setName(String name) { this.name = name; } } //狗继承动物 class Dog extends Animal { public Dog(String name) { setName(name); } } //猫继承动物 class Cat extends Animal { public Cat(String name) { setName(name); } }