子類重寫(覆蓋)父類的方法必須滿足的條件:
1.父類中的方法在子類中必須可見,即子類繼承了父類中的該方法(可以顯式的使用super關鍵字來訪問父類中的被重寫的方法),如果父類中的方法為private類型的,那么子類則無法繼承,也無法覆蓋。
2.子類和父類的方法必須是實例方法,如果父類是static方法而子類是實例方法,或者相反都會報錯。 如果父類和子類都是static方法,那么子類隱藏父類的方法,而不是重寫父類方法。
3.子類和父類的方法必須要具有相同的函數名稱、參數列表,並且子類的返回值與父類相同或者是父類返回類型的子類型(jdk1.5之后)。 如果方法名稱相同而參數列表不同(返回類型可以相同也可以不同),那么只是方法的重載,而非重寫。 如果方法名稱和參數列表相同,返回值類型不同,子類返回值類型也不是父類返回值類型的子類,編譯器就會報錯。
4.子類方法的訪問權限不能小於父類方法的訪問權限(可以具有相同的訪問權限或者子類的訪問權限大於父類)。 訪問權限由高到低:public、protected、包訪問權限、private。如果子類方法的訪問權限低於父類,則編譯器會給出錯誤信息
5.子類方法不能比父類方法拋出更多的編譯時異常(不是運行時異常),即子類方法拋出的編譯時異常或者和父類相同或者是父類異常的子類。