课程简介

多态

多种形态,是面向对象语言最核心特征,封装和继承都是为多态准备的,非常重要

多态的含义

意味着允许不同类的对象对同一消息做出不同的响应。

多态的分类:

1.编译时多态:设计时多态,方法重载来实现
2.运行时多态:程序运行时来决定调用哪个方法

多态的条件:

1.满足继承关系
2.父类引用指向子类对象。

向上转型

父类引用指向子类实例,默认的把子类的实例转为父类的实例了 如:Animal one=new Dog();
能够调用父类的重写方法和派生的方法,不能调用子类特有的方法

向下转型

向上向下转型总结:前提是父类引用指向子类实例对象,父类指向父类,子类指向父类都会报错
向下转型:把指向子类对象的父类的引用付给了子类叫向下

Animal one=new Dog();//向上引用
Dog a=(Dog)one;//向下引用

instanceof运算符

instanceof运算符判断是否能够对象转化,提高向下转型的安全性
if(two instanceof Cat){}
if(two instanceof Animal){}
if(two instanceof object){}
核对是否能够 向下转 子类转 父类转object类都可以

总结

向下转型(强制类型转换):
1.子类引用指向父类对象,此处必须进行强转
2.必须满足转型条件才能转换。
3.instanceof 判断左边的对象是否是右面的实例
4.父类引用指向子类实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有方法。
5.父类中的静态方法无法被子类重写,所以向上转型之后。只能调用到父类原有的静态方法。

类型转换案例(上)

方案1:编写方法,传入不同类型的动物,调用格子的方法
优点:看起来非常清晰
缺点:增加多个需求的话就要写很多重载方法

方案2:编写方法传入动物的父类,方法中通过类型转换调用指定子类的方法(新增需求不多的时候推荐使用)
优点:一个方法解决各种问题
缺点:后期维护的时候,如需新增需求,要在方法体内部破坏原有封装,新增功能

类型转换案例(下)

多态的操作:
当我们在实际开发中需要同一个操作行为,针对不同的参数,返回不同的实例对象,完成不同操作结果时,适用于多态的操作。
能够更好的体现类型转换的价值

抽象类

abstract: 抽象类。不能实例化,但可通过向上转型指向子类实例。
应用:父类只知道子类应该具有的特性,但实际应用中没有实例化父类的必要,而是通过子类的实例化来实现具体的功能。
优点:限制子类的设计随意性;同时避免无意义的父类实例化。

抽象方法

abstract+类:抽象类
abstract+方法:抽象方法
1.抽象类限制父类实例化,只能被继承,通过子类向上转型实例化。
2.抽象方法不允许包含方法体,子类必须重写父类的抽象方法。若不重写,则子类也必须变为抽象类。
3.抽象类、抽象方法应用价值:限制子类必须具有某种能力,提醒子类要实现自己的特定方法。
4.包含抽象方法的类一定是抽象类,但是抽象类中可以没有抽象方法
5.static、final、private不能与abstract同时出现。抽象方法要在子类中被重写,而private只在当前类被访问,final、static方法不能被子类重写,所以不能与abstract并存。

最后修改:2019 年 12 月 31 日 11 : 34 PM
如果觉得我的文章对你有用,请随意赞赏