符志军 王景景
【摘 要】方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
【关键词】方法重载;多态性;参数
一、方法重载性质
多态性可以用“一个对外接口,多个内在实现方法”来表示。也就是说,我们可以在一个类中定义多个同名方法,程序在调用某个方法时,系统会自动根据参数类型和个数的不同调用不同的方法,这种机制被称为方法重载。它与方法重写不一样。方法重载:同一个类中,方法名相同,参数不同,方法体不同;方法重写:不同的类中,方法体不同,参数相同,方法名也相同.(两同两不同)方法重载的作用:在有多个同名参数的类中,在调用时通过不同的参数来调用不同的方法。方法重写的作用: 在继承中,子类可用方法重写,对父类进行扩充或改造。
Java支持重载方法,即多个方法可以共享一个名字。但是,各方法之间必须在参数个数、顺序或类型方面有所区别。如下就是一个重载了而重载要满足一下条件:1.必须是同一个类。2.方法名(也可以叫函数)一样。3.参数类型不一样或参数数量不一样。
例如:
public class DoubleIt{
public static String doubleItt(String data){ // 参数类型为String
System.out.println(data+data);
returndata+data;
}
public static intdoubleItt(int data){ // 参数类型为int
System.out.println(2*data);
return 2*data;
}
}
二、方法重载作用
方法重载就是对不同数据类型的的数据实现相似的操作。方法重载,很大程度是为了程序的可读性,即使不用,也是不会妨碍程序运行的。当我们利用继承由父类创建子类时,如果父类中的某些方法不适合子类,我们无法删除它们,但可以重新定义它们,这被称为覆盖。
三、方法重载的类型
java允许在一个类中,多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析。
(一)普通方法的重载
普通方法的重载是Java实现多态技术的重要手段,为编程带来了很多便利
当方法同名时,为了让编译器区别他们,至少需要下面之一不同:
1)参数个数不同
2)对应位置上的参数类型不同不允许参数完全相同而只是返回值不同的情况出现。无法进行编译,程序在eclips中显示错误。
(二)构造方法的重载
(三)重载的解析
当类的设计者提供了重载方法之后,类的使用者在使用这些方法时编译器需要确定调用哪一个方法,确定的唯一依据是参数列表,确定的过程被称为重载的解析。
以下举些例子说明:
showaa(int a ,int b,int c) //这是一个具有相同的参数数据类型的方法
showaa(int a ,int b,double c) //这是一个具有不同数据类型参数的方法
showaa(int a ,double b,double c)// 这是一个具有不同数据类型参数的方法
showaa(double a,doubleb,int c) //这是一个具有不同数据类型参数的方法
下面是调用
showaa(4,2,3);//1,2,3,4都是可行方法所有参数完全匹配1
showaa(6.0,2.0,3.0);//没有一个可行方法
showaa(4.0,2,3);//4是最佳可行方法
showaa(7,2.0,3);//3,4都是可行方法,没有最佳可行方法,报错。
重载和覆盖都是多态的表现,他们在某些地方很相似,很容易引起初学者的疑惑,这里将它们之间的区别总结如下:
1.重载和覆盖的方法名称都相同,但重载要求参数列表不同,而覆盖要求参数列表完全相同。
2.重载对于方法前面的修饰符没有限制,而覆盖则对这些修饰符的使用有限制
3.重载时编译器在编译期间就可以确定调用那一个方法,而覆盖则有可能在运行期间才能确定。
四、方法重载与重写的区别
方法重载是指方法名和方法的返回类型都相同,但方法参数不一样. 参数不一样体现在参数个数和参数类型不一样.方法重写:方法重写是相对继承而言的. 重写的方法名.返回类型,参数类型和参数个数都要求和父类中的一样. 这是重载和重写形式上的区别。
本质上的区别是:重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
java中重写父类的方法只需写出与父类一模一样的这个方法即可,包括方法名,参数类型,参数值,返回值。java重写父类方法后,原有的父类里面的实现全部清空,变为重写后的内容。
方法重载为:
Public static void main(string[] args){
//todo自动生成的方法存根
Overload reload=new overload();
Reload.method();
}
Public void method(){
System.out.println(“这是一个普通的函数”);
}
Private void method(){
System.out.println(“这是对method方法的重载):
}
}
在重载的方法中一般地访问权限修饰符对方法的重载不影响。也即,它们不是构成不同方法的必要条件。通俗点讲,方法的不同和访问修饰符是否一致没有任何关系。当然在以上的程序中如果访问修饰符不一致,而参数相同(或者都没有参数)的话,java默认其都为同一种方法,因此编译无法通过,报错。
【参考文献】
[1] 张润莲,张向利,叶进.案例教学法及其运用[J].桂林电子工业学院学报,2004,24(4):102-105.
[2]李岚.案例教学法探析[J].云南财贸学院学报,2004,20:347-349.
[3] 宋平;王振;提高Java语言教学效果的探索与实践[J];沈阳农业大学学报(社会科学版);2006年04期