[JAVASE] 类和对象(四) – 多态

作者 : admin 本文共1173个字,预计阅读时间需要3分钟 发布时间: 2024-06-9 共1人阅读

目录

一. 多态的定义

        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 基本概念

多个不同的对象进行同一行为时, 所产生的结果不同.

[JAVASE] 类和对象(四) – 多态插图

以上三个类, 在子类 Rect 与 Cycle 中,重写了父类中的draw 方法. 

[JAVASE] 类和对象(四) – 多态插图(1)

 在测试类 Test 中, 实现了向上转型.

 至此, 多态的定义以及多态的实现条件 已经呈现, 接下来,详细的解读一下多态的三个实现条 件.


 二. 多态的实现条件 

        2.0 基本介绍

多态的实现条件:
1. 在继承体系下

2. 实现向上转型

3. 实现重写 与 动态绑定 

         2.1 向上转型 与 向下转型

[JAVASE] 类和对象(四) – 多态插图(2)

                2.1.1 向上转型

向上转型: 父类引用 引用 子类的对象.

                2.1.2 向上转型的方式

向上转型的三种方式:

a. 直接赋值

 [JAVASE] 类和对象(四) – 多态插图(3)

b. 方法传参

[JAVASE] 类和对象(四) – 多态插图(4)

c. 方法返回值

[JAVASE] 类和对象(四) – 多态插图(5)

                 2.1.3 向下转型

向下转型: 子类引用 引用 父类的对象.

[JAVASE] 类和对象(四) – 多态插图(6)

         2.2 重写 与 动态绑定

                2.2.1 重写

重写:

a. 方法名相同.

b. 参数列表相同(个数, 类型, 顺序).

c. 返回值可以不同, 但是必须构成父子类关系.

                2.2.2 重写的注意事项 

重写的注意事项:

a. 被 static , final, private 修饰的方法, 不能够被重写.

(被static修饰, 表示这个方法属于类, 不属于对象

被final修饰, 表示这个方法不可变

被private修饰, 表示这个只能够在当前类中进行访问)

b. 子类中重写方法的访问权限需要 大于等于 父类中重写方法的访问权限.

                2.2.3 静态绑定 与 动态绑定

 静态绑定: 在程序编译时就能确定要执行的是哪一个方法. 典型代表是 重载.

 动态绑定: 在程序编译时不能够确定要执行的是哪一个方法, 需要等到程序运行时才能够确   定. 典型代表是 重写.

我的理解:

[JAVASE] 类和对象(四) – 多态插图(7)   

程序编译的时候先找到的是 父类中重写方法的地址, 等到程序运行的时候再将父类中重写方法的地址替换为 子类中重写方法的地址, 这时调用的就是子类的重写方法. 这样就实现了动态绑定. 


三. 重写与重载的区别

重写:

a. 方法名相同.

b. 参数列表相同(个数, 类型, 顺序).

c. 返回值可以不同, 但是必须构成父子类关系.

重载:

a. 方法名相同

b. 参数列表不同(个数, 类型, 顺序).

c. 与返回值无关.


四. 总结 

a. 多态的定义

b. 多态的三个实现条件(继承体系, 向上转型, 重写与动态绑定

c. 重写与重载的区别

重点理解: 多态的三个实现条件

本站无任何商业行为
个人在线分享 » [JAVASE] 类和对象(四) – 多态
E-->