Java的重写与重载

权限修饰符 返回值类型 方法名(参数列表)throw 异常 {
	方法体
}

重载

重载考虑的是,相同的方法名,参与的参数类型不一致,为了统一调用名而采取的措施。例如实现一个计算器,计算器的加法可能涉及整数 + 整数,整数 + 浮点数。所以需要设置多个add方法,修改其参数列表,以适应实际需求。而调用者不需要考虑使用哪种add方法,统一使用add即可,编译器会自动根据参数类型对应不同的add方法。
考虑的时方法名与参数列表,方法名必须相同,参数列表必须不同,不同体现在与参数的个数,参数的类型,参数的顺序。与其返回值类型,权限修饰符无关。因为对于两个函数:
public void f(){}
private int f(){}
他们是不同的函数,不构成重载,在调用时都是f(),系统是看不出来二者的返回值类型,权限修饰符。也在不能判定当前调用的是那个函数。
重载举例:

private int f(int a, double b){}
private int f(int a){}   √
private int f(int b, double a){}  ×  编译器不关注形参名,两个形参与被重载方法一样都是(int,duoble)
private int f(double a, int b){}   √
private int f(double a, float b){}  √
private int f1(double a, int b){}  × 方法名不同 

重写

子类继承父类后对父类的方法进行覆盖,改造称之为重写。
1.方法名与参数列表需要完全一致。
2.子类重写方法的权限修饰符不小于父类被重写方法的权限修饰符。
特别的:父类方法由private修饰,不能被重写。
3.子类重写方法的返回值类型是父类被重写方法的类型或其子类。
4.子类重写方法抛出的异常类型不大于父类被重写方法抛出的异常类型。

注:子父类的同名同参的方法要么都非static(此时可以考虑重写),要么都是static(此时不是重写)
重写举例:

父类:
public Object f(int a, double b){ 方法体 }
private Object f(int a, double b){ 方法体 } 私有的方法子类不能重写
子类:
public Object f(int a, double b){ 方法体 } √ 无意义的重载
public Object f(int a, double b){ 方法体2 } √ 有意义的重载
public int f(int a, double b){ 方法体2 } √ 方法体不同,返回值类型是父类的子类
private Object f(int a, double b){ 方法体 }  × 权限修饰符小于父类
public Object f1(double a, int b){}  × 方法名不同 

从编译与运行的角度看

重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不
同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就构成了
不同的方法。它们的调用地址在编译期就绑定了。Java的重载是可以包括父类
和子类的,即子类可以重载父类的同名不同参数的方法。所以,对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定
而重写它体现了多态性,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值