对于数组来说,实际上只能存储Java对象的“内存地址”,数组中存储的每个元素是“引用”。
以下代码为相关例子:
public class Test4 {
public static void main(String[] args) {
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();
}
animals[0] = new Cat();
animals[0].move();
Animal[] anis = {new Cat(),new Bird()};
for(int i = 0;i < anis.length;i++){
anis[i].move();
}
//调用子类特意的方法的话,需要向下转型
for(int i = 0;i < anis.length;i++){
if(anis[i] instanceof Cat){
Cat cat = (Cat)anis[i];
cat.mouse();
}else if(anis[i] instanceof Bird){
Bird bird = (Bird)anis[i];
bird.sing();
}
}
}
}
class Animal{
public void move(){
System.out.println("move");
}
}
class Cat extends Animal{
public void move(){
System.out.println("猫咪在爬");
}
public void mouse(){
System.out.println("猫咪抓老鼠");
}
}
class Bird extends Animal{
public void move(){
System.out.println("小鸟在飞");
}
public void sing(){
System.out.println("小鸟在唱歌");
}
}
输出结果为: