方法覆蓋也稱為重寫,重寫即子類重新定義了父類的方法。
重寫:
1、重寫的方法必須與原方法有相同的方法名、參數列表和返回值類型(Java SE5之后返回值類型可以是其類型的子類型)
2、被重寫的方法不能是final類型,因為final類型無法重寫
3、被重寫的方法不能是private,因為private無法繼承,而繼承是重寫的前提
4、被重寫的方法不能為static, 如果父類中的方法為靜態,而子類的方法不是靜態的,但是兩個方法除了這一點其他都滿足重寫條件,那么會發生編譯錯誤, 反之亦然。如果子類和父類中的方法都是靜態的,並且滿足重寫條件,但仍然不會發生重寫,因為靜態方法是在編譯時把靜態方法和類的引用進行匹配。
5、重寫的方法的訪問權限不能小於原方法
6、重寫拋出的異常的范圍不能大於原方法
7、重寫是在運行是發生的,JVM會在代碼運行時作出決定。
方法重載簡稱重載,重載即同一個類中兩個或多個方法名相同但參數不同的情況
重載:
1、方法名必須相同
2、參數列表必須不同(參數的個數,類型,順序不同)
3、方法的返回類型可以相同也可以不同
4、僅僅返回值類型不同不足以成為方法的重載
5、重載是發生在編譯時的,因為編譯器可以根據參數類型來選擇使用哪個方法
重寫和重載的區別:
1、重寫只能用於子類重寫父類的方法,而重載用於同一類中的所有方法
2、重寫的參數列表必須相同,重載的參數列表必須不同
3、重寫要求返回值類型必須一致或是其子類,重載沒有要求
4、重寫對方法的訪問權限和拋出異常有特殊的要求,而方法的重載沒有這方面的限制
5、父類的方法只能被同一子類重寫一次,而一個方法可以在所有類中被重載很多次
6、重寫是運行時的多態,重載是編譯時的多態