1. 程式人生 > >Java 基礎:抽象類與接口

Java 基礎:抽象類與接口

文章 屬性 例如 功能 年齡 名稱 進行 區別 編譯錯誤

1.什麽是抽象

當父類的某些方法不確定時,可以用abstract關鍵字來修飾該方法[抽象方法],用abstract來修飾該類[抽象類]。

我們都知道,父類是將子類所共同擁有的屬性和方法進行抽取,這些屬性和方法中,有的是已經明確實現了的,

有的還無法確定,那麽我們就可以將其定義成抽象,在後日子類進行重用,進行具體化。

這樣,抽象類也就誕生了。

例如,定義了“動物”父類,其中“動物名稱”和“動物年齡”屬性已經明確了,但是“動物叫”的方法沒有明確,此時就可以將“動物叫”定義為抽象方法。

所以,抽象類是為了把相同的但不確定的東西的提取出來,為了以後的重用。定義成抽象類的目的,就是為了在子類中實現抽象類。

2.抽象類與抽象方法

用abstract修飾的類,即抽象類;用abstract修飾的方法,即抽象方法。

抽象方法不能有方法主體。

抽象類不能被實例化。因為抽象類中方法未具體化,這是一種不完整的類,所以直接實例化也就沒有意義了。

抽象類中不一定要包含abstrace方法。也就是了,抽象中可以沒有abstract方法。

一旦類中包含了abstract方法,那類該類必須聲明為abstract類。

抽象類中可以構造方法

抽象類中可以存在普通屬性,方法,靜態屬性和方法。

如果一個類中有一個抽象方法,那麽當前類一定是抽象類;抽象類中不一定有抽象方法。

抽象類中的抽象方法,需要有子類實現,如果子類不實現,則子類也需要定義為抽象的。

3.接口

接口不能用於實例化對象。

接口沒有構造方法。

接口中所有的方法必須是抽象方法。

接口不能包含成員變量,除了 static 和 final 變量。

接口不是被類繼承了,而是要被類實現。

接口支持多繼承。

接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會報錯)。

接口中可以含有變量,但是接口中的變量會被隱式的指定為 public static final

變量(並且只能是 public,用 private 修飾會報編譯錯誤)。

接口中的方法是不能在接口中實現的,只能由實現接口的類來實現接口中的方法

接口是隱式抽象的,當聲明一個接口的時候,不必使用abstract關鍵字。

接口中每一個方法也是隱式抽象的,聲明時同樣不需要abstract關鍵字。

接口中的方法都是公有的。

4.接口與抽象類的區別

1. 抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。

2. 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。

3. 接口中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法。

4. 一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。

文章來源參考:

http://www.runoob.com/java/java-abstraction.html

http://www.runoob.com/java/java-interfaces.html

https://www.cnblogs.com/ibelieve618/p/6410910.html

Java 基礎:抽象類與接口