目录
一. 多态的定义
1.1 基本概念
二. 多态的实现条件
2.0 基本介绍
2.1 向上转型 与 向下转型
2.1.1 向上转型
2.1.2 向上转型的方式
2.1.3 向下转型
2.2 重写 与 动态绑定
2.2.1 重写
2.2.2 重写的注意事项
2.2.3 静态绑定 与 动态绑定
三. 重写与重载的区别
重写:
重载:
四. 总结
一. 多态的定义
1.1 基本概念
多个不同的对象进行同一行为时, 所产生的结果不同.
以上三个类, 在子类 Rect 与 Cycle 中,重写了父类中的draw 方法.
在测试类 Test 中, 实现了向上转型.
至此, 多态的定义以及多态的实现条件 已经呈现, 接下来,详细的解读一下多态的三个实现条 件.
二. 多态的实现条件
2.0 基本介绍
多态的实现条件:
1. 在继承体系下
2. 实现向上转型
3. 实现重写 与 动态绑定
2.1 向上转型 与 向下转型
2.1.1 向上转型
向上转型: 父类引用 引用 子类的对象.
2.1.2 向上转型的方式
向上转型的三种方式:
a. 直接赋值
b. 方法传参
c. 方法返回值
2.1.3 向下转型
向下转型: 子类引用 引用 父类的对象.
2.2 重写 与 动态绑定
2.2.1 重写
重写:
a. 方法名相同.
b. 参数列表相同(个数, 类型, 顺序).
c. 返回值可以不同, 但是必须构成父子类关系.
2.2.2 重写的注意事项
重写的注意事项:
a. 被 static , final, private 修饰的方法, 不能够被重写.
(被static修饰, 表示这个方法属于类, 不属于对象
被final修饰, 表示这个方法不可变
被private修饰, 表示这个只能够在当前类中进行访问)
b. 子类中重写方法的访问权限需要 大于等于 父类中重写方法的访问权限.
2.2.3 静态绑定 与 动态绑定
静态绑定: 在程序编译时就能确定要执行的是哪一个方法. 典型代表是 重载.
动态绑定: 在程序编译时不能够确定要执行的是哪一个方法, 需要等到程序运行时才能够确 定. 典型代表是 重写.
我的理解:
在程序编译的时候先找到的是 父类中重写方法的地址, 等到程序运行的时候再将父类中重写方法的地址替换为 子类中重写方法的地址, 这时调用的就是子类的重写方法. 这样就实现了动态绑定.
三. 重写与重载的区别
重写:
a. 方法名相同.
b. 参数列表相同(个数, 类型, 顺序).
c. 返回值可以不同, 但是必须构成父子类关系.
重载:
a. 方法名相同
b. 参数列表不同(个数, 类型, 顺序).
c. 与返回值无关.
四. 总结
a. 多态的定义
b. 多态的三个实现条件(继承体系, 向上转型, 重写与动态绑定)
c. 重写与重载的区别
重点理解: 多态的三个实现条件