抽象類和介面

2021-09-13 03:27:35 字數 4800 閱讀 3804

1.1 為什麼使用抽象類

有些類建立物件沒有意義。需要把這個定義為抽象類

1 animal animal=new animal();

2 pet pet=new pet()

抽象類(abstract)不能例項化,只能被繼承。

1.2 abstract 關鍵字

關鍵字:abstract:抽象

可以修飾方法:叫做抽象方法,沒有方法體,需要使用分號表示宣告結束

可以修飾類:叫做抽象類,抽象方法所在的類必須是抽象類

1.3 抽象方法

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

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

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

​ 3抽象類中可以包含抽象方法,也可以不包含

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

1.4 抽象類:

使用abstract關鍵字修飾

特點:1)抽象類的出現由於類中有抽象方法,但是抽象類中也可以沒有抽象方法

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

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

1.5 抽象類和普通類的區別:

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

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

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

思考:final和abstract是否可以連用?

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

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

綜上所述:final和abstract不可以連用

final的類中能否有abstract方法?不能

abstract類中能否有final方法?可以

練習1:

編寫交通工具類,具有前進run()功能,子類有自行車、小轎車、地鐵,重寫父類方法,主人有屬性name,age屬性,方法回家gohome(交通工具),需要使用交通工具,使用抽象類優化程式

traffictool

bicycle

carsubway

master

1.6 static,final,abstract總結

修飾符 修飾物件 規則

static 屬性 表示類公共的屬性,使用類來呼叫,推薦使用類呼叫(類名.屬性名)

方法 表示類公共的方法,在靜態方法中只能直接呼叫靜態變數或靜態方法,不能使用this,super,如果要想呼叫非靜態方法和屬性,需要建立物件。

**塊 靜態**塊,程式一載入靜態**塊就執行,而且只執行一次

final 屬性、區域性變數 常量,final int i=12;或者final int i;i=12;只能賦值一次。

方法 該方法不能被子類重寫,可以被繼承。

類 該類不能被繼承。

abstract 方法 抽象方法,該方法只有方法宣告,沒有方法體

構造方法和static方法、final方法不能是抽象的

有該方法的類稱為抽象類,類名前必須加abstract

類 抽象類不能被例項化

抽象類可以指向子類物件的引用

抽象類可以有普通方法,可以被子類繼承

父類的抽象方法必須在子類中實現,除非子類也是抽象類

第二節: 介面

生活中的介面:usb,插座…

usb:物理:必須滿足usb介面的寬度和厚度

內部:需要遵守磁片的個數

插座:首先需要滿足插頭的個數

滿足電壓和電流一些規則

2.1 介面的概念

從語法上講:介面是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實現。

從功能上講:介面表示一種約定或能力

2.2 使用介面的好處

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

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

降低**之間的耦合性

2.3 介面的特點:

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

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

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

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

public abstract void fun();

介面中可以使用一下格式宣告方法:

void fun();

public static final int a = 9;

int a = 9;

2.4 介面的宣告語法

關鍵字inte***ce:表示乙個介面,介面inte***ce和類class是平級關係

語法:public inte***ce 介面名

2.5介面的實現類

介面與類的關係:implements

語法:pulbic inte***ce i

​public class impl implements i

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

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

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

語法:public class dog extends animal implements i

}2.6 介面的分類:

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

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

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

2.7 介面和介面的關係:

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

介面繼承的特點:

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

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

3)介面可以多繼承

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

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

所以介面支援多繼承

2.7 介面中特殊的方法:

1)在介面中使用static關鍵字修飾的方法有方法體

​ 靜態方法需要有方法體

2)jdk1.8之後新增功能:

​ 在介面中使用default關鍵字修飾的方法有方法體

2.8 介面的使用:

1.usb介面

public inte***ce usbinte***ce

public class fan implements usbinte***ce

}public class mouse implements usbinte***ce

}public class computer 2.在乙個平台或系統中,如果多個類都需要使用到某些方法,可以將這些方法定義到乙個介面中,所有需要這些方法的類,可以實現這個介面,有效地實現解耦。

案例:現有交通工具類transport類

​ transport有三個子類,飛機plane,車car,船ship

plane有,客機,貨機,戰鬥機

​ car有客車,貨車,坦克

​ 船有客船,貨船,航母

戰鬥機,坦克,航母都有**攻擊的功能,通過分析,此功能不能來自於父類,所以可以講**攻擊的功能設定在乙個介面中

//交通工具類

public class transport

}//飛機類

public class plane extends transport {}

//船類

public class ship extends transport {}

//車類

public class car extends transport {}

//**攻擊介面

public inte***ce fire

//航母類:繼承ship,實現fire

public class carrer extends ship implements fire

}//戰鬥機:繼承plane,實現fire

public class fightingplane extends plane implements fire

}//坦克類:繼承car,實現fire

public class tank extends car implements fire

}//測試

public class testtransport

}2.9 抽象類和介面區別

語法:1>抽象類使用abstract,介面使用inte***ce

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

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

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

功能:1>抽象類一般用來表示同類事物,介面可以表示不是同類事物。

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

介面和抽象類

介面和抽象類 今天自學了一下介面,從第一次接觸介面又進一步理解介面的原理。想到介面或許我們更多的是想到和類的對比,而類中抽象類和介面又更為相似。現在我講下我對介面和抽象類的理解。如果單從具體 來看,對這兩個概念很容易模糊,甚至覺得介面就是多餘的,因為單從具體功能來看,除多重繼承外 c 抽象類似乎完全...

抽象類和介面

抽象類 1.是一種特殊的類,除了不能被例項化外,具有類得其他特性.2.抽象類的方法可以不宣告為abstract,此時可以實現方法提 如果宣告為abstract,則不可以實現方法體,只能宣告,如 public abstract int remove int i,int j 此時類必須宣告為抽象 3.乙...

抽象類和介面

1.抽象類 含有abstract修飾符的類即為抽象類。可用於實現 重用。抽象類與普通類的唯一區別 不能建立例項物件 允許有抽象方法,但不必須是抽象的。抽象類中定義的抽象方法必須在具體子類中實現,所以不能有抽象構造方法或抽象靜態方法 如果沒有全部實現抽象父類的抽象方法,子類也要定義為抽象型別。2.介面...