重载与重写

时间:2020-8-24 作者:admin


重载与重写

另一种问法:Overload和Override的区别

二者的概念和规则

重载

概念

​ 在同一类中,出现方法名称相同,参数列表的不同就是重载,参数列表可以是类型或者个数不同,构造器也可以重载

规则

​ 重载跟方法的权限修饰符、返回值类型、形参变量名、方法体没关系

//构成重载的方法
public void getSum(int i,int j){
    System.out.println("1");
}

public void getSum(double d1,double d2){
    System.out.println("2");
}

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

public void getSum(int i,String s){
    System.out.println("4");
}	
//以下不构成重载
public int getSum(int i,int j){
    return 0;
}

public void getSum(int m,int n){

}

private void getSum(int i,int j){

}

重写

概念

子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。构造器不能重写;

重写以后,当子类的对象调用这个子父类同名同参数的方法时,实际执行的是子类重写的方法;

规则

要求:两同两小一大

  • 方法名:必须完全一致

  • 形参列表:必须完全一致

  • 返回值类型:

    • 父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
    • 父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类
    • 父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须也是double)
  • 修饰符:重写的方法的修饰符范围>=被重写方法的修饰符范围(public>protected>缺省>private) 特殊情况:子类不能重写父类中声明为private权限的方法

  • 抛出的异常:子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

补充:

重写的方法不能是static的,final的,子类不可见的

子类和父类中的同名同参数的方法被声明为static的则不是重写。

举例:

class Circle{
	public double findArea(){}//求面积
}
class Cylinder extends Circle{
	public double findArea(){}//求表面积
}
***************
class Account{
	public boolean withdraw(double amt){}
}
class CheckAccount extends Account{
	public boolean withdraw(double amt){}
}

重载(Overload)与重写(Override)区别

基本区别

名词 Overload 方法的重载 Override 方法的重写
位置 同一个类中 在父子类中
方法名 必须相同 必须相同
形参列表 必须不同 必须相同
返回值类型 无关 <= 如果返回值类型是void和基本数据类型,那么必须一致,如果是引用数据类型,重写方法的返回值类型可以和被重写方法的返回值类型一样或是它的子类
抛出的 异常列表 无关 <= 重写方法抛出的异常类型要么和被重写方法一样,要么是被重写方法抛出异常的子类
权限修饰符 无关 (建议一致) >= 重写方法的权限修饰符要么和被重写方法一样,要么比被重写方法的权限范围大

多态理解

重载:不表现为多态性

​ 重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了

不同的方法。它们的调用地址在编译期就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。所以:对于重载而言,在

方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;

重写:表现为多态性

​ 而对于多态,只等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。