对象的多态(核心、重点)
一个对象的编译类型和运行类型可以不一致
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 {@Overridepublic void cry() {System.out.println("Cat cry() 小猫喵喵叫...");}}
Dog
package test01;public class Dog extends Animal {@Overridepublic void cry() {System.out.println("Dog cry() 小狗汪汪叫...");}}
Object
package test01;public class Object {public static void main(String[] args) {//体验对象多态的特点//animal 编译类型就是 Animal , 运行类型 DogAnimal animal = new Dog();//因为运行时 , 执行到改行时,animal运行类型是Dog,所以cry就是Dog的cryanimal.cry(); //小狗汪汪叫//animal 编译类型 Animal,运行类型就是 Catanimal = new Cat();animal.cry(); //小猫喵喵叫}}

