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的角度來說,重載是靜態分派,重寫是動態分派。重載發生在一個類中,同名方法如果有不同的參數列表則被視爲重載;重寫發生在父類和子類之間;

重寫要求父類和子類有相同的參數列表,有兼容的返回類型。

 

 

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