public class Array {
public static void main(String[] args) {
// 以下3行可以写到数组花括号内
// Animal a = new Animal();
// Mammal m = new Mammal();
// Cat c = new Cat();
Animal[] animals= {new Animal(), new Mammal(), new Cat()};
/**
* S instanceof T二元运算符,返回boolean类型。
* 判断前面的对象S是否是后面T的类,或者其子类、实现类的实例。如果是返回true,否则返回false。
* 必须要同一树下、引用变量不能是基本类型、
* S如果为null,则返回false;否则设S为obj的类型对象,剩下的问题就是检查S是否为T的子类型.如果S == T,则返回true;
*/
//如果有包含关系,先判断最里层,否则可能永远访问不了最里层
for (int i = 0; i<animals.length; i++){
if(animals[i] instanceof Cat){
Cat cat = (Cat)animals[i];
cat.jump();
}else if(animals[i] instanceof Mammal){
Mammal mammal = (Mammal)animals[i];
mammal.walk();
}else{
animals[i].move();
}
}
}
}
//extends 继承
class Animal{
public void move(){
System.out.println("animals is moving..");
}
}
class Mammal extends Animal{
public void walk(){
System.out.println("mammal is walking");
}
}
class Cat extends Mammal{
public void jump(){
System.out.println("cat is jumping");
}
}