天天看點

Java基礎知識總結:接口vs抽象類、重寫vs重載

我覺得面試就真不該問這種問題,不了解的同學建議去看看

JDK

集合類的源碼,對接口和抽象類的了解會更深刻。

接口

接口是方法的集合,不同的實作類可以去實作這個接口中的方法,是以有點像抽象類裡的抽象方法,但是和抽象方法不同的是,接口更加通用,規定了一整套行為(例如

java.util.List

),而抽象方法往往是規定了該抽象類裡的某種行為。

抽象類

抽象類的作用大多是抽取多個

Java

類的通用邏輯,對于子類特有的邏輯可以放在抽象方法中,由這些子類去各自實作,本質是通過子類繼承的方式達到代碼複用的目的(例如

java.util.AbstractList

)。

面向對象三要素

我們都知道,面向對象程式設計有三要素:封裝、繼承和多态。

封裝很簡單,就是設定邊界,避免暴露内部狀态;

繼承則是一種緊密耦合的關系,有利于代碼複用;

多态就是父類引用指向具體的子類實作,在程式設計時這種對應關系無法确定,隻有在程式運作時才能知道。

重寫和重載

重寫

(Overwrite)

是指,父子類中相同名字和參數的方法,不同的實作,展現在父類與子類這種上下層關系裡。

重載

(Overload)

則是相同名字的方法,但是不同的參數,本質上這些方法簽名是不一樣的,展現在某個類中,是并行的關系。

這裡有個問題,方法名稱和參數一緻,但是傳回值不同,這種情況在

Java

代碼中算是有效的重載嗎?面試裡經常問道。答案是不行,編譯直接報錯。

繼續閱讀