10.2 多态的概念

多态就是拥有多种形态。在Java语言中,多态主要是拥有相同的形式,但不同的参数却实现不同的功能。

【实例10.2】这很像前面学习过的重载,下面先看一个实例。


01 ///创建一个学生类

02 ///在学生类中创建几个带不同参数的构造器

03 public class student

04 {

05 student()

06 {}

07 student(string name)

08 {}

09 student(string name, string code)

10 {}

11 }


【代码说明】以上实例中有3个构造器的重载函数,这3个函数有着相同的形态。但是它们根据参数的不同,实现的功能也不同。这就是多态,所以说重载其实具有多态性,简单地说,重载是多态的一种形式。

【运行效果】这里仅是复习重载,没有任何输出结果。

10.2.1 使用多态编写程序

【实例10.3】为了作个比较,把10.1节中的实例使用多态的形式重新编写。


01 ///创建一个学生类

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

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

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

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

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

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

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

09 public class student1

10 {

11 int x;

12 int y;

13 int z;

14 void print(int x)

15 {

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

17 }

18 void print(int x, int y)

19 {

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

21 }

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

23 {

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

25 }

26 void print(double a)

27 {

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

29 }

30 void print(double a, double b)

31 {

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

33 }

34 void print(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 student1 st=new student1();

41 st.print(2);

42 st.print(2,3);

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

44 st.print(1.1);

45 st.print(1.1,2.2);

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

47 }

48 }


【代码说明】第14~37行定义了6个相同名称的print()方法,但它们都具备不同的参数类型或参数个数。第41~46行调用这些方法,系统通过参数类型和参数个数来判断究竟调用哪个方法。

【运行效果】


4 7

19 2.2

4.4

7.7


以上参数涉及的是基本数据类型,下面将讲述参数是对象类型的数据。对象数据的操作通过操纵对象句柄来实现。程序操纵对象句柄,即内存地址,而实际对象是不会被改变的。

在父类中声明并在子类中被覆盖的方法,可以实现多态调用。编译器会自动寻找到正确的类型。如果在父类中没有声明的方法,在子类中声明了,此方法就不能实现多态。