多态[多种状态]基本介绍
方法或对象具有多种形态,面向对象的三大特性,多态是建立在封装和继承基础之上的
多态的体现
一个对象的编译类型的运行类型可以不一致
Animal animal = new Dog();
[animal 编译类型是Animal, 运行类型Dog]
编译类型在定义对象是,就确定了,不能改变
运行类型是可以变化的
animal= new Cat()
;[animal的运行类型变成了Cat,编译类型仍然是Animal]
编译类型看定义时=号的左边,运行类型看=号的右边
多态的前提是:两个对象(类)存在继承关系
属性没有重写的说法,属性的值看编译类型
本质:父类的引用指向了子类的对象
语法:父类类型 引用名= new 子类类型()
特点:变异类型看左边,运行类型看右边
可以调用父类中的所有成员(需遵守访问权限)
但是不能调用子类的特有的成员
最后的运行效果看子类的具体实现,先找子类重写的方法
语法:子类类型 引用名 =(子类类型)父类引用;
只能强转父类的引用,不能强转父类的对象
Animal animal = new Dog();
要求父类的应用必须指向的是当前目标类型的对象
Dog dog =(dog)animal;
当向下转型后,可以调用子类类型中所有的成员
用于判断对象的运行类型是否为xx类型或xx类型的子类型