方法重载和方法重写
2014-06-26 00:00
169 查看
转载自:http://my.oschina.net/brucelee80/blog
1. 入参个数
2. 入参类型
3. 入参类型的顺序
实际调用时,根据调用方法的参数列表不同来决定使用哪个方法,这是多态的一种体现。
1. 入参必须相同
2. 返回值必须相同
3. 抛出的异常不能比父类多
4. 权限控制不能比父类更严格(3、4可以理解为:父类能用的地方,重写的子类也必须一定能用)
方法的重写只发生在继承父类和实现接口,final方法不能被重写。重写是对父类的扩充,是父类多态的表现。
转载自: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) { } }
区别
区别点 | 重载方法 | 重写方法 |
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
相关文章推荐
- 方法的重载(overloading)与重写(overriding)
- java初学者实践教程15-方法的重载与重写
- C# 方法签名 重载(overload) 重写(override)
- C#中继承实现父类方法、重写、重载
- 对虚方法、重写、重载的认识
- 方法的重载(overloading)与重写(overriding)
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- 静态方法可以重载但是不可以重写
- c# 重载WndProc,实现重写“最小化”的方法
- java中方法的重载与重写的区别
- java学习中重写与重载方法的区别(转自:小鸟的天空)
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- 方法重载和方法重写的区别(转载)
- 类以及方法的重载、隐藏与重写
- 方法的重写(覆盖)+重载
- 全新java初学者实践教程15(java SE5.0版)--jdk5中方法的重载与重写
- C#基础篇 重写与重载,以及其中设计的虚方法和抽象方法的使用和区别
- JAVA 方法重载,方法重写,继承
- 一个初学者对虚方法、重写、重载的认识
- java中方法的重载与重写的区别