1. 程式人生 > >抽象類,密封類,介面

抽象類,密封類,介面

一、抽象類:

  1. 抽象類是一種模板模式,為所有子類提供了一個通用模板,子類可以在這個模板基礎上進行擴充套件,可以避免子類設計的隨意性,就可以做到嚴格限制子類的設計,使子類之間更加通用。
  • 抽象類:包含抽象方法的類(或只對部分方法進行抽象),只有方法的宣告,沒有方法體;

  • 抽象方法:在抽象類中不予實現,必須由繼承抽象類的子類來實現; 抽象方法不能被private所修飾,不加訪問修飾限定符時預設其為public;

  • 抽象類的派生類: a.如果是普通類,必須實現抽象類的所有抽象方法; b.如果是抽象類,則可以不實現基類的抽象方法;

  • 要點: a. 有抽象方法的類只能定義為抽象類; b. 抽象類不能例項化,即不能用new來例項化抽象類; c. 抽象類可以包含屬性、例項方法、構造方法,但是構造方法不能用來new例項,只能用來被子類呼叫; d. 抽象類只能用來繼承; e. 抽象方法必須由子類來實現。

  1. 抽象類和普通類的區別

a. 抽象類不能被例項化; b. 抽象方法只能被publicprotected修飾,或者不加訪問修飾限定符; c. 抽象類由abstaract修飾; d. 抽象方法不能在抽象類中實現。

二、密封類

  1. 當一個類被final所修飾的時候,將這個類稱為密封類。
  • 密封方法:被final修飾的方法。

  • 注意: a. 該類不能作用於基類,即無法被繼承; b. 就算派生類也被final所修飾也不可以; c. 密封方法不能被重寫。

  • 密封類的作用:防止有意的派生。

  1. 語法格式
final class 類名 [extends 類名] {
	//類體;
}

三、介面

在Java中繼承只是單繼承,即一個子類只能有一個直接父類,介面的產生正是為了解決Java中單繼承的問題。

  • 介面是比抽象類還要“抽象”的“抽象類”,可以更加規範的對子類進行約束,全面的實現了:規範和具體實現的分離

  • 介面就是規範,定義的是一組規則,抽象出了一類事物的某種共有的特性;

  • 一個介面定義一個協定,介面本身不提供它所定義的成員的實現,只指定繼承介面的任何非抽象型別必須實現介面的所有成員;

  • 介面類似於抽象類,不能被例項化,可以包含抽象方法和靜態常量欄位

  • 介面宣告的基本形式如下:

[介面修飾符] interface 介面名 [extends 基介面列表] {
	//介面體;
}
  • 注意: a. interface關鍵字要注意首字母小寫; b. 介面名稱一般以able為字尾,以表明能夠支援某種功夫能,或者以字母 I 開頭,也表明是一個介面; c. 基介面列表以逗號分隔;

  • 介面的成員

a. 介面通常是公共契約,故介面中可以宣告零個或多個成員,但只能包含其成員的簽名,介面的成員包括從基介面繼承的成員和本介面宣告的成員,介面成員只能包含抽象方法和靜態常量欄位; b. 介面的成員變數預設為靜態常量欄位(public static final)但介面的成員變數不能帶除了public static final以外的任何修飾符。 c. 介面的成員方法預設為公共抽象方法(public abstract),同樣,介面的成員方法不能帶除了public abstract以外的任何修飾符。

  • 介面和抽象類的區別

a.介面內的方法不能被實現,抽象類可以有部分非抽象方法; b.抽象類只能被繼承一次,介面可以被實現或繼承多個; c. 抽象類是對類整體的抽象,但是一個介面可以使用關鍵字extends繼承多個介面; d. 在介面中的成員變數和成員方法預設為public static final和public abstract,抽象類當中的方法和成員變數沒有明確要求,但是抽象類當中的方法不能是private。