第一節:抽象類
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 抽象類的子類 要麼是抽象類 要麼重寫抽象類中的所有抽象方...