一、什么是多态?
所谓多态,就是指一个引用变量在不同的情况下的多种表现形态。
也可以理解为,多态是指通过指向父类的引用变量,来调用在不同子类中方法的实现
注意:方法重写是实现多态的基础
二、多态的运用
1、方法的多态
方法的多态主要体现在方法的重写和重载上
2、对象的多态
(1)一个对象的编译类型和运行类型可以不一致
(2)编译类型在定义对象时就确定了,不能改变
(3)运行类型 是可以变化的
(4)编译类型看定义时=号的左边,运行类型看=号右边
Animal animal = new Dog();【animal编译类型是Animal,运行类型是Dog】
animal = new Cat();【animal的运行类型变成了Cat,编译类型仍然是Animal】
三、多态的注意事项和细节
注意事项:多态的前提是:两个对象(类)存在继承关系
属性没有重写之说,属性的值看编译类型
细节讨论:
1、多态的向上转型
1)本质:父类的引用指向子类的对象
2)语法:父类类型 引用名 = new 子类类型()
3)特点:编译类型看左边,运行类型看右边。
可以调用父类中所有的成员(遵守访问权限)
不能调用子类中的特有成员
最终运行效果看子类的具体实现
Animal dog = new Dog();
//这就是向上转型,此时dog的编译类型是Animal,运行类型是Dog
//dog可以调用Animal类中所有可继承的属性和方法,也就是除了private之外的
//但dog无法调用Dog类里特有的方法
2、多态的向下转型
如果需要调用子类中特有的方法,有两种解决方案
第一就是在创建对象的时候就用子类来创建
第二就是用向下转型,强制将编译类型转换成子类的
Dog d = (Dog)dog;
//这就是向下转型,将原先编译类型为Animal的dog强制转换成编译类型为Dog
//现在这个d就可以调用Dog类中特有的方法
版权声明:本文为sundream1212原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。