您的位置:首页 > 编程语言 > Java开发

方法重载和方法重写

2014-06-26 00:00 169 查看
转载自:http://my.oschina.net/brucelee80/blog

重载

方法的重载(overload)是指一个类有多个同名的方法,但他们的入参不相同:

1. 入参个数

2. 入参类型

3. 入参类型的顺序

实际调用时,根据调用方法的参数列表不同来决定使用哪个方法,这是多态的一种体现。

public class Test {
public void fun() {
System.out.println("1");
}

public void fun(int i, String s) {
System.out.println("2");
}

public void fun(String s, int i) {
System.out.println("3");
}

public static void main(String[] args) {
Test t = new Test();

t.fun();
t.fun(2, "2");
t.fun("3", 3);
}
}


重写

方法的重写(Override)是指继承时,子类对父类的重新实现(接口的方法的实现也可以看做重写):

1. 入参必须相同

2. 返回值必须相同

3. 抛出的异常不能比父类多

4. 权限控制不能比父类更严格(3、4可以理解为:父类能用的地方,重写的子类也必须一定能用)

方法的重写只发生在继承父类和实现接口,final方法不能被重写。重写是对父类的扩充,是父类多态的表现。

import java.io.IOException;
class A {
public void fun(String str, int i) throws IOException {

}
}

// 子类含有父类的可见成员变量和方法
// 两个方法名重名,如果如果既不是方法的重载,又不是方法的重写,那必然编译失败,因为不能出现两个相同的方法
public class Test extends A {
// 编译失败,protected比父类的public更严格,不属于方法的重写
// protected void fun(String str,   int i) throws IOException {
// }

// 编译失败,Exception比父类的IOException更大,不属于方法的重写

7fe0
// public void fun(String str,   int i) throws Exception{
// }

// 编译成功,虽然Exception比父类的IOException更大,不属于方法的重写
// 但这属于方法的重载(因为参数列表不同)
public void fun(int i, String str) throws Exception {
}

// 方法的重写
public void fun(String str, int i) {

}
}


区别

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)
转载自:http://my.oschina.net/brucelee80/blog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java重载 Java重写