<b>Java的Overriding与Overloading</b>[Java编程]
本文“<b>Java的Overriding与Overloading</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1.Overriding
Overriding翻译过来是“重写/覆盖”. 它是覆盖了一个办法并且对其重写,以求到达差别的作用.对我们来说最熟习的覆盖就是对接口办法的实现,在接口中普通只是对办法举行了声明,而我们在实现时,就需求实现接口声明的全部办法.除了这个典型的用法以外,我们在担当中也大概会在子类覆盖父类中的办法.
重写的主要特点是:
1)办法名必须与被重写办法一致.
2)办法参数列表必须与被重写办法一致.
3)返回范例必须与被重写办法一致.
4)重写的办法不能降低原办法的"可见度".
比方:被重写办法为protected void do(int i,double d),则重写办法可认为protected void do(int i,double d),大概public void do(int i,double d),但是不可以是private void do(int i,double d).
5)不能抛出新的非常大概"更宽的"非常.
比方:被重写办法为public void do(int i,double d) throws IOException,则重写办法可认为public void do(int i,double d) throws IOException ,大概public void do(int i,double d) throwsddeeException(IOException的子类),但是不可以是public void do(int i,double d) throwsException,因为Exception是IOException的父类,比IOException"更宽".
6)被覆盖的办法不能为private,不然在其子类中只是新定义了一个办法,并没有对其举行覆盖.
2.Overloading
Overloading,翻译成“重载”. 它是指我们可以定义一些名称相同的办法,通过定义差别的输入参数来辨别这些办法,然后再调用时,VM就会按照差别的参数款式,来挑选符合的办法履行.
其特点是:
1)各重载的办法名一致.
2)各重载办法的参数列表不一样(包含参数范例,参数个数,参数次序3项中的一项或多项).
3)返回范例肆意.(不能通过办法的返回值来辨别重载办法.)
4)拜候掌握符肆意.(不能通过办法的拜候权限来辨别重载办法.)
5)可以肆意抛出自身的非常,而不管被重载办法.(不能通过抛出的非常来辨别重载办法.)
Overloading是指“Two or more methods can have the same name if they have different numbers or types of parameters and thus different signatures. ”明显,对重载的唯一要求就是参数列表必须改变,不然就不是重载了.
3.范例转换中的重载
在一些情形下,Java 的自动范例转换也实用于重载办法的自变量.比方,看下面的程序:
// Automatic type conversions apply to overloading.
class OverloadDemo {
void test() {
System.out.println("No parameters");
}
// Overload test for two integer parameters.
void test(int a, int b) {
System.out.println("a and b: " + a + " " + b);
}
// overload test for a double parameter
void test(double a) {
System.out.println("Inside test(double) a: " + a);
}
}
class Overload {
public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();
int i = 88;
ob.test();
ob.test(10, 20);
ob.test(i); // this will invoke test(double)
ob.test(123.2); // this will invoke test(double)
}
}
该程序产生以下输出:
No parameters
a and b: 10 20Inside test(double) a: 88Inside test(double) a: 123.2
在本例中,OverloadDemo 的这个版本没有定义test(int) .因此当在Overload 内带整数参数调用test()时,找不到和它匹配的办法.但是,Java 可以自动地将整数转换为double 型,这种转换便可以办理这个问题.因此,在test(int) 找不到今后,Java 将i扩大到double 型,然后调用test(double) .当然,假如定义了test(int) ,当然先调用test(int) 而不会调用test(double) .只有在找不到切确匹配时,Java 的自动转换才会起作用,并且老是找到参数范例最"匹配"的办法,即它的形参比实参“大”且是最“接近”的.
本文出自 “子 孑” 博客,请务必保存此出处http://zhangjunhd.blog.51cto.com/113473/20373
以上是“<b>Java的Overriding与Overloading</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |