//一维数组中存储的元素类型是“引用数据类型”,可以是多态的情况,如果Cat和Bird都继承了Animal,那么同一个数组中 // 既可以放Cat也可以放Bird还可以放Animal,如果没有继承关系就不可以这样 class ArrayText02{ public static void main(String[] args) { // 创建一个Animal类型数组 Animal a1 = new Animal(); Animal a2 = new Animal(); Animal[] animals = {a1,a2}; // 对数组进行遍历 for (int i = 0; i < animals.length; i++) { Animal a = animals[i]; a.move(); // 上面两行代码可以合并成如下代码 animals[i].move(); } System.out.println("****************************"); // 动态初始化一个长度为3的Animal类型数组 Animal[] ans = new Animal[3]; ans[0] = new Animal(); // 下行代码会报错,原因是数组中元素类型要求统一,不能存放不同类型的元素 // ans[1] = new String(); // 同一个数组中可以存放具有继承关系的父子类对象 ans[1] = new Cat(); ans[2] = new Bird(); // 遍历ans数组并调用父子类共同具有的方法 for (int i = 0; i < ans.length ; i++) { ans[i].move(); } System.out.println("--------------------------------"); // 遍历ans数组并调用子类特有的方法(这里需要向下转型) for (int i = 0; i < ans.length; i++) { if (ans[i] instanceof Cat){ Cat cat = (Cat)ans[i]; cat.eat(); }else if (ans[i] instanceof Bird){ Bird bird = (Bird)ans[i]; bird.sing(); } } } } //动物类 class Animal{ public void move(){ System.out.println("Animal move ...!"); } } class Cat extends Animal{ public void move() { System.out.println("猫在走猫步!"); } // 子类中特有的方法 public void eat(){ System.out.println("猫在吃老鼠!"); } } class Bird extends Animal{ public void move() { System.out.println("鸟儿在飞翔!"); } public void sing(){ System.out.println("鸟儿在唱歌!"); } }