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
以上参数涉及的是基本数据类型,下面将讲述参数是对象类型的数据。对象数据的操作通过操纵对象句柄来实现。程序操纵对象句柄,即内存地址,而实际对象是不会被改变的。
在父类中声明并在子类中被覆盖的方法,可以实现多态调用。编译器会自动寻找到正确的类型。如果在父类中没有声明的方法,在子类中声明了,此方法就不能实现多态。