[厉害了,我的JAVA基础](六)重载和重写的区别
2018-03-05 10:42
567 查看
在Java程序中确定一个方法需要三个要素:
➤ 调用者:也就是方法的所属者,既可以是类,也可以是对象
➤ 方法名:方法的标识
➤ 形参列表:当调用方法时,系统将根据传入的实参列表匹配
必须具有不同的参数列表
可以有不同的返回类型
可以有不同的访问修饰符
可以抛出不同的异常
✈ 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型
✈ java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们不同的参数个数和参数类型来决定具体使用哪个方法
问题:为什么方法的返回值类型不能用于区分重载的方法?
✈:对于int f(){}和void f(){}两个方法,如果这样调用int result = f();系统可以识别是调用返回值类型为int的方法,但是java调用方法可以忽略返回值,如果使用如下方法调用:f(),就不能判断该方法的返回值类型。在编程中有一条重要规则:不要让系统糊涂,系统一糊涂,肯定就是你错了!!!
参数列表必须完全与被重写的方法相同
返回的类型必须一直与被重写的方法的返回类型相同或其子类
访问修饰符的限制一定要大于被重写方法的修饰符
重写方法一定不能抛出新的检查异常或者比重写方法申明更加宽泛的检查型异常,例如:父类的方法声明了一个检查异常IOException,在重写该方法时,就不能抛出Exception异常,只能抛出IOException或其子类异常
参考链接:
http://blog.csdn.net/zhu_apollo/article/details/1852542
http://blog.csdn.net/linzhaojie525/article/details/55213010
➤ 调用者:也就是方法的所属者,既可以是类,也可以是对象
➤ 方法名:方法的标识
➤ 形参列表:当调用方法时,系统将根据传入的实参列表匹配
重载
重载方法的规则:必须具有不同的参数列表
可以有不同的返回类型
可以有不同的访问修饰符
可以抛出不同的异常
✈ 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型
✈ java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们不同的参数个数和参数类型来决定具体使用哪个方法
问题:为什么方法的返回值类型不能用于区分重载的方法?
✈:对于int f(){}和void f(){}两个方法,如果这样调用int result = f();系统可以识别是调用返回值类型为int的方法,但是java调用方法可以忽略返回值,如果使用如下方法调用:f(),就不能判断该方法的返回值类型。在编程中有一条重要规则:不要让系统糊涂,系统一糊涂,肯定就是你错了!!!
public class D { public void test(){ System.out.println("无参的test方法!"); } public String test(String name){ System.out.println("有参数的test方法!"); return "6666"; } public static void main(String[] args) { D d = new D(); d.test(); d.test("why"); } }
重写
重写方法的规则:参数列表必须完全与被重写的方法相同
返回的类型必须一直与被重写的方法的返回类型相同或其子类
访问修饰符的限制一定要大于被重写方法的修饰符
重写方法一定不能抛出新的检查异常或者比重写方法申明更加宽泛的检查型异常,例如:父类的方法声明了一个检查异常IOException,在重写该方法时,就不能抛出Exception异常,只能抛出IOException或其子类异常
class D { void test(int i) { System.out.print(i); } void test(byte b) { System.out.print(b); } } class TestOverriding extends D { @Override void test(int i) { i++; System.out.println(i); } public static void main(String[] agrs) { D d = new TestOverriding(); d.test(0); // 1 d.test((byte) 0); //0 } }
参考链接:
http://blog.csdn.net/zhu_apollo/article/details/1852542
http://blog.csdn.net/linzhaojie525/article/details/55213010
相关文章推荐
- Java基础——overload(重载)与overwrite(重写)的区别
- Java基础之重写与重载区别
- Java基础——方法的重载和重写的区别与分析
- 【java基础知识】重载与重写的区别
- Java基础学习巩固3--重载和重写分析及区别
- Java基础之重写(覆写)与重载区别
- JAVA基础(一)——重载(Overloading)与重写(Overriding)的区别
- JAVA中的基础-----重载与重写(覆盖)的区别:overload与override
- java基础-------重载(Overload)和重写的区别(Override)
- JAVA基础之重载与重写的区别
- Java基础之继承性,重写重载区别
- Java基础温习 (6)重载,重写以及继承,多态的区别
- 重载与重写的区别(以Java为例)
- C#基础篇 重写与重载,以及其中设计的虚方法和抽象方法的使用和区别
- java中覆盖、重写与重载的区别
- Java.Java中重载和重写的区别
- 转:java中覆盖、重写与重载的区别
- Java中重载和重写的区别
- java中重载与重写的区别
- C#基础篇 重写与重载,以及其中设计的虚方法和抽象方法的使用和区别