什么是多态
- 面向对象的三大特性:
封装、继承、多态(抽象)。 - 多态的定义:
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是方法的调用)
简单来说,多态就是相同的行为,不同的实现 - 实现多态的技术称为:
动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 - 多态的作用:
消除类型之间的耦合关系。 - 现实中,关于多态的例子:
比方说按下 F1 键这个动作,如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
多态的必要条件
- 继承关系
- 重写
- 父类引用指向子类对象
多态的表现
- 重写overriding是父类和子类之间多态性的一种表现
- 重载overloading是一个类中多态性的表现。
多态的分类:
- 静态多态(使用重载实现)
在编译期就已知方法执行的最终结果 - 动态多态(使用动态绑定和重写实现)
编译期未知,运行期根据绑定对象的不同,有不同的效果。
动态多态的实现基础(转型技术)
- 基础数据类型
- 当操作符两端的数据类型不一致的时候,就会发生转型
- 当大的数据往小的空间放,必须进行强转 // 向下转型
- 但小的数据放入大空间的时候,系统会自动将其类型转换为大的数据类型 // 向上转型
- 引用数据类型同样存在转型技术:转型的两个类必须存在继承关系
- 向上转型——自动转型的
- 父类的引用可以指向子类的对象
- 父类 superclass = new 子类(因为在继承关系下,子类已经包含了父类的全部信息)
- 当父类引用指向子类对象的时候,只能调用到来自父类的属性和行为(受访问修饰符约束)
- 向下转型——强制类型转换
- 编译有可能通过,但运行起来有风险(因为你强转的类型不一定包含你说需要的东西)
- 必须保证运行的最终效果是父类引用指向子类对象或本类的应用指向本类的对象(存在相同的东西)
- 子类 名称 = new superclass
- 当本类引用指向本类对象的时候,能看到本类所有的属性和行为(受访问修饰符约束)
- 向上转型——自动转型的
Instanceof 关键字
- 用于判断运行时对象的真正类型
文章评论