抽象類
1.抽象類的概念
1.什麼是抽象
“抽象”在程式設計中通常指的是從具體事物中提取出共同特性或行為,忽略掉細節和差異,形成一個更高層次的、更一般的概念或表示。這種過程允許我們關注於事物的本質,而不是具體的實現細節。
2.為什麼要抽象
Java中的抽象類(Abstract Class)是一種特殊的類,它不能被例項化,即不能建立該類的具體物件。抽象類的主要目的是為子類提供一個通用的模板,定義一些子類共有的屬性和方法,同時允許子類根據自身需求實現或重寫這些方法。抽象類之所以要抽象,主要有以下幾個原因:
- 強制實現方法:
抽象類可以包含抽象方法(使用abstract
關鍵字修飾的方法,沒有方法體)。當子類繼承抽象類時,必須實現(重寫)抽象類中所有的抽象方法,除非子類也被宣告為抽象類。這一特性強制了子類必須提供某些方法的具體實現,確保了類的行為一致性。 - 程式碼複用:
抽象類可以包含非抽象方法(即普通方法),這些方法為子類提供了通用的實現,避免了程式碼重複。子類可以直接使用這些方法,也可以根據需要重寫它們。 - 定義介面標準:
在Java中,抽象類可以作為一組介面的集合,定義了介面之間的契約,但同時又提供了部分實現。這使得抽象類在介面和實現類之間起到了橋樑的作用,既定義了行為標準,又提供了一定的實現細節。 - 限制例項化:
由於抽象類不能被例項化,它主要用於被其他類繼承。這種限制確保了抽象類僅僅是一個模板或基類,而不是一個可以獨立使用的物件。 - 設計靈活性:
透過使用抽象類,開發者可以設計出更加靈活和可擴充套件的系統。抽象類允許在將來新增新的子類,而不需要修改現有的程式碼。這種設計方式符合開閉原則(對擴充套件開放,對修改關閉),有助於維護系統的穩定性和可維護性。 - 提高程式碼可讀性:
抽象類透過其結構和命名,為系統提供了清晰的層次結構和功能劃分,使得程式碼更加易於理解和維護。
2.抽象類,實現類,介面的區別
雖然抽象類和介面都可以實現抽象化和多型性,但是它們在一些細節上有所不同。以下是抽象類和介面的區別:
2.1 實現方式
抽象類是一種特殊的類,需要透過繼承它來使用。介面是一種純抽象的型別,需要透過實現它來使用。
2.2 方法型別
抽象類中的方法可以是抽象的或者非抽象的,而介面中的方法都是抽象的。
2.3 成員變數
抽象類中可以有普通成員變數,也可以有靜態成員變數,而介面中只能有常量。
2.4 構造方法
抽象類中可以有構造方法,而介面中不能有構造方法。
2.5 訪問修飾符
抽象類中的成員變數和成員方法可以有public、protected、default、private四種訪問修飾符,而介面中的成員變數和成員方法只能有public訪問修飾符。
3.抽象類的好處
1、抽象類最根本的作用,還是提高程式碼的規範性和可維護性。
2、抽象類一般是作為父類,讓子類繼承的。所以它可以將子類的共有的一些屬性和方法寫入抽象類中,以便子類使用(除抽象方法不能直接使用)。這一點跟繼承特性是一樣的。
3、抽象類中可以定義抽象方法。這也是實際應用中最重要的一點。抽象方法就是當父類知道有一些方法子類必須實現或者要有,但每一個子類的對於這個方法的具體實現都不同,那麼,就把這個方法定義為抽象的。不規定具體實現內容。
這樣子類在繼承後,知道這個方法自己必須要去實現。