Java面試之方法的覆寫與重載的區別

一、覆寫

  1. 方法的覆寫可以總結成容易記憶的口訣:“一大兩小兩同”。
    (1)一大:子類的方法訪問權限控制符只能相同或變大。
    (2)兩小:拋出異常和返回值只能變小,能夠轉型成父類對象。子類的返回值、拋出異常類型必須與父類的返回值、拋出異常類型存在繼承關係。
    (3)兩同:方法名和參數必須完全相同。
    覆寫示例代碼如下:
class Father {
    protected Number doSomething(int a, Integer b, Object c) throws SQLException {
        System.out.println("Father's doSomething");
        return new Integer(7);
    }
}

class Son extends Father{
    /**
     * 1. 權限擴大,由protected到public(一大)
     * 2. 返回值是父類的Number的子類(兩小)
     * 3. 拋出異常是SQLException的子類
     * 4. 方法名必須嚴格一致(兩同)
     * 5. 參數類型與個數必須嚴格一致
     * 6. 必須加@Override
     */

    @Override
    public Integer doSomething(int a, Integer b, Object c) throws SQLClientInfoException {
        if(a == 0){
            throw new SQLClientInfoException();
        }
        return new Integer(17);
    }
}

說明: 覆寫只能針對非靜態、非 final、非構造方法。由於靜態方法屬於類,如果父類 和子類存在同名靜態方法,那麼兩者都可以被正常調用。如果方法有 final 修飾 ,則 表示此方法不可被覆寫。 如果想在子類覆寫的方法中調用父類方法 , 則可以使用 super 關鍵字。

二、重載

  1. 重載的方法必須和以前方法的方法名一致。
  2. 重載的方法的返回值類型和以前的方法的返回值類型可以一樣,可以不一樣,不能以此作爲重載的依據。
  3. 重載方法的參數類型、參數順序或參數個數必須和以前方法的不一樣。
    補充:方法簽名=方法名+參數列表
    ex:
現在有一個方法:public static int info(int x,double y),下面那個方法是對本方法的正確重載?
答: public static int info(int x,int y);(答案其一)//方法名必須相同,此處爲參數類型不同
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章