Java 多态性浅析
2012-08-16龙军
龙 军
(海口经济学院 海南 海口 570203)
在面向对象的程序设计中,多态指的是一个名词可以有多个语义,Java 的多态性是通过继承中的覆盖(动态多态性)和方法的重载(静态多态性)实现的。
1 方法重载(Overloading)
Java 允许在一个类中有同名的多个方法存在,但要求参数列表不同,叫做方法重载。 这里的方法指具有相似功能的成员方法或构造方法,不同的参数列表指的是方法的参数个数或参数的数据类型或对应位置上的参数类型不同。 笔者通过下面的例子做一说明,首先做一个名叫ffcz 的类,在其中分别编写几个同名方法,再做一个名叫cz 的Application 类,在main 方法中生成ffcz 类的对象实例,依次调用成员方法并体现结果。
1.1 编写ffcz 类
1.1.1 在类中声明String 类型的成员变量mc。
1.1.2 编写传入一个字符串参数的方法,直接将传入参数的值赋给成员变量。
1.1.3 编写传入字符串和整数两个参数的方法,按第二个参数对第一个参数处理后赋给成员变量。
1.1.4 编写传入一个整数参数的方法,根据传入参数的值给成员变量赋值。
1.1.5 编写传入两个字符串参数的方法,将两个参数连到一起赋给成员变量。
1.2 编写cz 类
在main 方法中生成ffcz 类对象的实例,再调用各set_mc方法并体现成员变量mc。
1.3 运行结果分析
结果表明Java 的编译器会根据参数列表的不同来选择具体调用的方法。
2 方法重写(Overriding)
当子类的成员变量和父类的成员变量同名时,父类的成员变量被隐藏,如果是成员方法同名,父类的成员方法被覆盖,也叫方法重写。 重写要求子类和父类有相同的方法名称,且返回类型及参数列表也完全相同。 当子类方法的访问权限与父类的不同时,要求子类方法的权限更大。 笔者通过构建一个父类(ffcx)、一个子类(ffcx1)和一个Application 类(cx),在父类中编写一个构造方法和设置字符串的的方法,采用子类中无方法和重写父类写方法两种形式,在cx 中体现结果。
2.1 子类中无方法
2.1.1 编写父类ffcx,在父类中声明一字符串如mc,再编写构造方法给mc 赋初值,编写set_mc 方法,将传入的参数值赋给mc。
2.1.2 编写空的子类ffcx1。
public class ffcx1 extends ffcx{ }
2.1.3 编写Application 类cx,在main 方法中生成ffcx1 的对象实例,并体现出mc。
ffcx1 o1=new ffcx1();
System.out.println(o1.mc);
o1.set_mc("这是关于方法重写的示例");
System.out.println(o1.mc);
2.1.4 运行结果分析,运行Application 类。
结果表明,虽然ffcx1 类体中没有任何代码,但父类中属性和方法被子类继承了。
2.2 子类中有方法
2.2.1 在子类中重写构造方法和set_mc 方法,赋给mc 不同的值。
2.2.2 运行结果分析,运行Application 类。
结果表明,当在子类中加入与父类同名的方法后,程序调用的是子类的方法,即子类重写了父类的方法。
3 重载与重写的总结
重载和重写的方法名称都相同,但重载要求参数列表不同,重写要求参数列表完全相同。 重载是在一个类中,对方法前面的修饰符没有限制,重写是子类对父类方法重写,对修饰符的使用有限制。
总之,Java 的多态性就是“一个接口,多种方法”。 通过重载和重写,提高了程序的可读性和可扩展性,使类的结构更加清晰、简洁。
[1]胡书敏.Java 第一步[M].清华大学出版社,ISBN:7-302-18607-6.
[2]雍俊海.Visual C++大学教程[M].清华大学出版社,ISBN:7-302-12671-3.