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

[厉害了,我的JAVA基础](六)重载和重写的区别

2018-03-05 10:42 567 查看
在Java程序中确定一个方法需要三个要素:

➤ 调用者:也就是方法的所属者,既可以是类,也可以是对象

➤ 方法名:方法的标识

➤ 形参列表:当调用方法时,系统将根据传入的实参列表匹配

重载

重载方法的规则:

必须具有不同的参数列表

可以有不同的返回类型

可以有不同的访问修饰符

可以抛出不同的异常

✈ 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型

✈ 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: