第10章 多态

本章要介绍多态的概念和多态的用法。实际讲解时,仍然会围绕一个如何理清编程思路的问题,讲述如何使用多态。同时通过对大量程序实例的分析,让读者领会实际开发中如何实现类的多态。多态也是面向对象程序语言的核心知识,读者一定要熟悉前面的知识,然后再学习本章的内容。

本章重点:

什么是多态。

动态绑定和静态绑定。

超类。

10.1 多态的产生

程序员在开发过程中,需要在代码中编写很多方法函数。其实很多方法函数的形式差不多,例如,现实开发中可能会出现下列代码。


01 ///这里是带一个参数的print方法

02 void print1(int x)

03 {

04 System.out.println(2*x);

05 }

06 ///这里是带两个参数的print方法

07 void print2(int x, int y)

08 {

09 System.out.println(2*x+y);

10 }


上面的例子中,其实两个方法函数的形式都一样,只不过参数的形式不同。如果所有的方法函数都像上面的实例一样,那么整个程序中会出现很多的方法函数名字。对于程序员来说,在调用方法函数时,很容易出错。

【实例10.1】下面来举一个实际的程序代码段。


01 ///创建一个学生类

02 ///创建了一个print方法

03 ///创建了一个带两个整型参数的print方法

04 ///创建了一个带三个整型参数的print方法

05 ///创建了一个具有一个double型数据的方法

06 ///创建了一个具有两个double型数据的方法

07 ///创建了一个具有三个double型数据的方法

08 ///以上所有方法均遵从多态机制

09 public class student

10 {

11 int x;

12 int y;

13 int z;

14 void print1(int x)

15 {

16 System.out.println(2*x);

17 }

18 void print2(int x, int y)

19 {

20 System.out.println(2*x+y);

21 }

22 void print3(int x, int y, int z)

23 {

24 System.out.println(2x+yz);

25 }

26 void print4(double a)

27 {

28 System.out.println(2*a);

29 }

30 void print5(double a, double b)

31 {

32 System.out.println(2*a+b);

33 }

34 void print6(double a, double b, double c)

35 {

36 System.out.println(2*a+b+c);

37 }

38 public static void main(String[]args)

39 {

40 student st=new student();

41 st.print1(2);

42 st.print2(2,3);

43 st.print3(2,3,5);

44 st.print4(1.1);

45 st.print5(1.1,2.2);

46 st.print6(1.1,2.2,3.3);

47 }

48 }


【代码说明】在上面的程序段中,第14~37行有6个输出函数,当要调用时,很容易搞错。这种情况下,Java语言就引入了一个概念:多态。下一节将详细介绍什么是多态。

【运行效果】


4 7

19 2.2

4.4

7.7