1. 程式人生 > >基礎 | Java的重寫與過載

基礎 | Java的重寫與過載

Java四大基本特性中在介紹「多型性」時,提到過編譯時多型和執行時多型。編譯時多型是由方法過載來實現的,而執行時多型是由方法重寫來實現的。

建議重點關注Java中 「重寫與過載構成的基本條件」 相關問題。


什麼是過載和重寫?

過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載。

重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常(里氏代換原則)。

如下圖所示:

重寫與過載示意圖

注:過載是發生在同一個類中,具有相同方法名且有不同引數列表的多個方法間構成過載。而重寫是發生在具有繼承關係的子類與父類之間,子類可重寫父類的方法。


為什麼不能根據返回型別來區分過載?

華為面試的時候曾問過這個問題。

參考答案: 因為在呼叫方法時並不會判斷方法的返回值型別是什麼,如果根據返回值型別來區分過載,則程式會不知道去呼叫哪個方法。


構造器是否可被重寫?

構造器是不能夠被繼承的,故不能被重寫,但一個類可以有多個構造器,多個構造器間構成過載。


推薦閱讀


歡迎關注

Java名企面試吧,每天10點24分,我們不見不散!

丙子先生的宗旨是,每天以短篇幅講高頻面試題,不增加太多負擔,但需要持之以恆。

能力有限,歡迎指教!