基礎 | Java的重寫與過載
阿新 • • 發佈:2018-11-03
Java四大基本特性中在介紹「多型性」時,提到過編譯時多型和執行時多型。編譯時多型是由方法過載來實現的,而執行時多型是由方法重寫來實現的。
建議重點關注Java中 「重寫與過載構成的基本條件」 相關問題。
什麼是過載和重寫?
過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載。
重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常(里氏代換原則)。
如下圖所示:
注:過載是發生在同一個類中,具有相同方法名且有不同引數列表的多個方法間構成過載。而重寫是發生在具有繼承關係的子類與父類之間,子類可重寫父類的方法。
為什麼不能根據返回型別來區分過載?
華為面試的時候曾問過這個問題。
參考答案: 因為在呼叫方法時並不會判斷方法的返回值型別是什麼,如果根據返回值型別來區分過載,則程式會不知道去呼叫哪個方法。
構造器是否可被重寫?
構造器是不能夠被繼承的,故不能被重寫,但一個類可以有多個構造器,多個構造器間構成過載。
推薦閱讀
歡迎關注
Java名企面試吧,每天10點24分,我們不見不散!
丙子先生的宗旨是,每天以短篇幅講高頻面試題,不增加太多負擔,但需要持之以恆。
能力有限,歡迎指教!