对象的多态(核心、重点)
一个对象的编译类型和运行类型可以不一致
Animal animal= new Dog(); 编译类型是Animal,运行类型是Dog
编译类型在定义对象时就确定了,不能改变。
运行类型是可以改变的。
animal = new Cat(); animal的运行类型变成了Cat,编译类型还是Animal
编译类型看定义时=号的左边,运行类型看=号的右边。
案例
Animal
package test01;
public class Animal {
public void cry() {
System.out.println("Animal cry() 动物在叫....");
}
}
Cat
package test01;
public class Cat extends Animal {
@Override
public void cry() {
System.out.println("Cat cry() 小猫喵喵叫...");
}
}
Dog
package test01;
public class Dog extends Animal {
@Override
public void cry() {
System.out.println("Dog cry() 小狗汪汪叫...");
}
}
Object
package test01;
public class Object {
public static void main(String[] args) {
//体验对象多态的特点
//animal 编译类型就是 Animal , 运行类型 Dog
Animal animal = new Dog();
//因为运行时 , 执行到改行时,animal运行类型是Dog,所以cry就是Dog的cry
animal.cry(); //小狗汪汪叫
//animal 编译类型 Animal,运行类型就是 Cat
animal = new Cat();
animal.cry(); //小猫喵喵叫
}
}