Java 中的 override 和 overload,看這一篇就夠

問題出現:
即便對於一個經驗豐富的開發人員來講,方法重載和方法覆蓋的區別都能讓他猶豫一下,
對於新手來講,常常容易弄混淆。
有沒有比較深刻淺出的理解方式,能讓人過目不忘,用起來還能有條件反射般的速度呢?
其餘人是怎麼作的:
寫相似比較的博客很是之多,無非也就是分開介紹,而後比較區別。
好像也有效果,前提是要理解,完了還要不時拿來複習,保持記憶不被遺忘。
能夠這樣理解:
override 更準確的翻譯應該是推翻,重寫。
overload 更準確的翻譯應該是過載。
    若是你不是新手,看到這個解釋的時候應該有點茅塞頓開的感受,
    由於直譯以後的意思就是這兩個方式的功能歸納。
因此:
override 我的喜歡叫作方法重寫;
overload 我的喜歡叫作方法過載。
分析:
爲何叫方法重寫:
    父類中的方法知足不了須要,子類能夠推翻父類中的方法。
    一樣的方法名稱,參數列表,返回類型,拋出的異常(或者是父類拋出的異常的子類),子類重寫一個。
    因此方法重寫要求很嚴格,除了方法體內部的實現和訪問權限,其餘的都要和父類中須要被重寫的方法保持一致。
    有一點要特別注意,方法重寫以後訪問權限能夠不一樣:
        能夠擴大訪問權限,可是不能下降訪問權限。
        能夠看做是對子類的兼容性和拓展性要求的折衷妥協吧。
    注意:被重寫的方法訪問權限不能爲 private,由於 private 修飾的方法子類沒有訪問權限,更不要提重寫。

爲何叫方法過載:
    過載指的是應對不一樣的參數列表而產生的方法過載。
    因此方法過載要求方法名稱必須相同,參數列表必須不一樣;
    訪問權限,返回類型,拋出的異常之類的能夠相同也能夠不一樣。
        使用方法過載的目的,根據調用時的實參表與形參表,來選擇對應的方法體的。
    注意:若是某一方法在父類中是訪問權限是 private,那麼就不能在子類對其進行重載;
    若是定義的話,也只是定義了一個新方法,而不會達到重載的效果。
練習一下:
class A {
 protected int method1(int a, int b) { return 0; }
}

public class B extends A{ 
 public int method1(int a, int b) { return 0; }
 // private int method1(int a, int b) { return 0; } 
 // private long method1(int a, int b) { return 0; } 
 public short method1(int a, long b) { return 0; }
 private int method1(int a, long b) { return 0; }
}

(參考答案預警!你不打算在內心演算一下麼?)
參考答案:
class A {
 protected int method1(int a, int b) { return 0; }
}

public class B extends A{ 
 public int method1(int a, int b) { return 0; } // 正確,重寫父類方法,能夠擴大訪問權限
 // private int method1(int a, int b) { return 0; } // 錯誤,重寫父類方法,不能下降了訪問權限
 // private long method1(int a, int b) { return 0; } // 錯誤,重寫父類方法,不能改變返回值類型
 public short method1(int a, long b) { return 0; } // 正確,method1 方法參數過載,能夠有不一樣的訪問權限和返回值類型
 private int method1(int a, long b) { return 0; }/ /正確,method1 方法參數過載,能夠有不一樣的訪問權限和返回值類型
}
小結:
override 方法重寫,也叫方法覆蓋;
    要求與被重寫的方法:
        名稱相同,
        參數列表相同,
        返回類型相同,
        拋出的異常相同(或者是父類拋出的異常的子類)。
    被重寫的方法訪問權限不能爲 private。

overload 方法過載;
    要求過載的方法:
        方法名稱必須相同;
        參數列表必須不一樣;
        訪問權限,返回類型,拋出的異常能夠相同也能夠不一樣。

傳送門:http://blog.51cto.com/1350814...
本文系筆者原創
轉載請註明出處
—————————————ide

相關文章
相關標籤/搜索