Java中重写(override)和重载(overload)的区别?

1.重写(Override)

重写字面意思来看是重新写一遍的意思,其实就是子类继承父类所有的方法,在保证方法名、参数列表、返回值都相同的情况下,对方法体内容进行修改或者重写。

例如:

/**
 * Author:zhangkaifei
 * Date:2019/11/4
 * Description: 重写快捷键 Ctrl+o
 */
public class Father {
    public static void main(String[] args) {
        Father father=new Son();
        father.sayHello();
    }

    public void sayHello(){
        System.out.println("hello i am Father");
    }
}

class Son extends Father{

    @Override
    public void sayHello() {
        //super.sayHello();
        System.out.println("hello i am son");
    }
}

执行main方法,我们会发现在控制台输出子类son中的方法打印值

重写总结如下:

  1. 发生在子类和父类之间
  2. 方法名、参数列表、返回类型必须相同
  3. 子类访问修饰符的限制一定要大于父类中的访问修饰符(public>protected>default>private)
  4. 重写的方法不能抛出新的异常或者大于父类的检查型异常

2.重载(Overload)

在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载

例如:

public class Father {
    public static void main(String[] args) {
        Father father=new Son();
        father.sayHello();
    }

    public void sayHello(){
        System.out.println("hello i am Father");
    }

    public void sayHello(String desc){
        System.out.println(desc);
    }
}

重载总结:

  1. 重载发生在一个类中
  2. 重载要求同名方法的参数列表不同(参数类型,参数个数,参数顺序)
  3. 重载的时候返回值可以相同也可以不相同,无法根据方法返回值的类型来判断是否重载函数。

 

在面试中怎么回答两者的区别:

方法的重载和重写都是多态的体现,区别是重载是在编译时的多态性,重写是在运行时候的多态性,从JVM的角度来说,重载是静态分派,重写是动态分派。重载发生在一个类中,同名方法如果有不同的参数列表则被视为重载;重写发生在父类和子类之间;

重写要求父类和子类有相同的参数列表,有兼容的返回类型。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章