初学Java之面向对象三大特性之——多态

一、什么是多态?

所谓多态,就是指一个引用变量在不同的情况下的多种表现形态。

也可以理解为,多态是指通过指向父类的引用变量,来调用在不同子类中方法的实现

注意:方法重写是实现多态的基础

二、多态的运用

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版权协议,转载请附上原文出处链接和本声明。