學習筆記 抽象類與介面

2021-10-23 16:46:52 字數 3678 閱讀 2078

第一節:抽象類

1. 我們為什麼要使用抽象類

有些類建立物件不具體。需要把這個定義為抽象類

1.animal animal=new animal();

2.pet pet=new pet();

使用abstract修飾類變成抽象類:不能例項化,只能被繼承抽象類的構造方法不能直接使用,只能被子類呼叫。

2. abstract關鍵字

關鍵字:abstract:抽象

可以修飾類:叫做抽象類

可以修飾方法:叫做抽象方法,沒有方法體,需要使用分號表示宣告結束,抽象方法所在的類必須是抽象類

子類必須重寫父類的抽象方法,除非子類也是抽象類

3. 抽象方法

使用abstract關鍵字修飾,只表示宣告了乙個方法,但是沒有任何的實現。

特點:​1) 沒有方法體,需要使用分號表示方法宣告結束

​2) 如果乙個類中有乙個方法是抽象的,那麼這個類必須是抽象的

​3) 抽象方法必須被子類重寫,除非子類也是抽象類

4. 抽象類

使用abstract關鍵字修飾

特點:​ 1)抽象類中可以包含抽象方法,也可以不包含抽象方法。

​ 2)抽象類中有構造方法,但是不能建立物件,構造方法可以在子類中會被呼叫

​ 3)抽象類的存在就是為了被繼承,子類必須重寫父類的抽象方法,除非子類也是抽象類。

5. 抽象類與普通類的區別

1)抽象類需要abstract,而普通類不需要

​ 2)構造方法:都有,但是抽象類不能例項化物件,普通類可以

​ 3)成員方法:抽象類中可以存在抽象方法也可以存在非抽象方法,而普通類中只能存在非抽象方法

- final與abstract是否可以連用呢?

1)兩個關鍵字修飾方法時,final修飾的方法特點:可以被繼承不能被重寫;abstract修飾的方法特點:必須被重寫;所以這兩個關鍵字不能同時修飾同乙個方法

2)兩個關鍵字修飾類時:final修飾的類特點:不能被繼承;abstract修飾的類特點:必須被繼承;所以這兩個關鍵字不能同時修飾同乙個類

綜上所述:final和abstract不可以連用。final的類中不能有abstract方法,但是abstract類中可以有final方法。

6. static,final,abstract對比

第二節:介面

1. 介面的概念

從語法上講:介面是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實現。從功能上講:介面表示一種約定(規範)或能力

2. 使用介面的好處

擴充套件類的功能,保持對外介面一致

介面實現了多重繼承,完成類和任何實現介面子類的通訊和互動

降低**之間的耦合性

3. 介面的特點

1)介面不能建立物件,而且介面中沒有構造方法

2)介面中的方法一般都是共有抽象方法:public abstract

3)介面中所有的屬性都是共有靜態常量屬性:pulbic static final

在乙個介面中宣告方法時,若沒有宣告訪問許可權,預設也是public,若沒其他修飾預設也是abstract;宣告屬性時,若沒有宣告訪問許可權和靜態常量,預設也是public static final

public

inte***ce

usb

4. 介面的宣告語法關鍵字inte***ce:表示乙個介面,介面inte***ce和類class是平級關係

介面名命名習慣:

如果介面表示一種能力,命名採用:名字+字尾able ,比如 serializable comparable

如果介面表示一種約定或規範 ,按照類的命名規範 usb , comparator,charsequence

語法:

public

inte***ce 介面名

5. 介面的實現類介面與類實現關係用「implement」關鍵字實現,乙個類可以實現多個介面。

//語法

public

inte***ce

kpublic

class

impl implement k

}

思考:乙個類實現某個介面之後,是否可以存在父類?

​ 可以,實現介面和繼承類不衝突

注意:若乙個類有父類同時也實現介面,宣告類時,必須先繼承再實現介面

public

class

dogextends

animal

implements

i}

6. 介面分類1)普通介面:在介面中可以宣告抽象方法,和靜態常量屬性

2)常量群介面:在介面中只宣告一組靜態常量屬性

3)標誌性介面:在介面中沒有抽象方法,也沒有靜態常量,作用為了標記某個類具有某個功能

7. 介面與介面的關係

繼承關係:使用關鍵字extends實現介面與介面的繼承關係

介面繼承的特點:

1)介面中沒有私有成員,所以父介面中的所有成員都會被子介面繼承

2)父子關係中都是介面,所以在子介面中不需要實現任何的抽象方法

3)介面可以多繼承

思考:現有類a和類b,兩個類中都有fun()方法,假如類c繼承類a和類b,當使用類c的物件呼叫fun方法時,如何執行?此時不知道執行那個fun方法,所以類不可以多繼承。

現有介面a,b,兩個介面中都有fun方法,介面c繼承a,b,由於介面中的沒有方法體,所在只要在介面c中存在了fun方法即可。所以介面支援多繼承。

8. 介面的特殊方法:

1)jdk1.8之後介面中使用static關鍵字修飾的方法有方法體 靜態方法需要有方法體 ,注意只能通過介面名.方法名呼叫,因為不能被繼承

2)jdk1.8之後介面中使用default關鍵字修飾的方法有方法體 可以被繼承,通過實現類呼叫

9. 抽象類和介面的區別

語法:

1)抽象類使用abstract,介面使用inte***ce

2)抽象類中可以包含抽象方法,也可以包含非抽象方法,介面中只能包含抽象方法和靜態常量,jdk1.8之後介面可以包含靜態方法和預設方法。

3)抽象類和介面都不能例項化。

4)抽象類可以包含構造方法,介面中沒有構造方法。

功能:

1)抽象類一般用來表示同類事物,介面可以表示不同類事物。

2)抽象類可以實現**的重用,也可以約束子類的功能。介面就是約束實現類的功能,降低**之間的耦合性。

使用場景:

1)程式或模組內部使用抽象類

2)程式架構或模組之間使用介面

抽象類與介面學習

abstract 類 如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類 1.abstract 類不能直接被例項化 2.abstract 方法不能在它的類中實現,必須在其子類中實現 3.採用abstract方法的類就是抽象類,並且必須被宣告為abstract.4.僅當abstra...

(學習筆記)抽象類和介面

最近準備校招,所以複習的時候想來記錄一下學習的內容。首先聊聊介面類吧 1 抽象類的含義 包含抽象方法的類叫做抽象類。如果乙個類包括乙個或者多個抽象方法,該類必須被限定為抽象方法。2 抽象類的知識點 1.含有abstract修飾符的class即為抽象類,abstract類不能建立例項物件。2.含有ab...

java學習筆記(十六)抽象類與介面

抽象類特點 a 抽象類和抽象方法必須用abstract關鍵字修飾 b 抽象類不一定有抽象方法,有抽象方法的類一定是抽象類 c 抽象類不能例項化 那麼,如果例項化並使用呢?按照多型的方式,由具體的子類例項化。其實這也是多型的一種,抽象類多型。d 抽象類的子類 要麼是抽象類 要麼重寫抽象類中的所有抽象方...