亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

java語言

Java的抽象和接口

時(shí)間:2024-10-11 06:39:03 java語言 我要投稿

Java的抽象和接口

  Java廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),下面為大家介紹一下Java的抽象和接口,一起來看看!

  一、抽象:

  抽象類(abstract class):使用了abstract關(guān)鍵字所修飾的類叫做抽象類。抽象類無法實(shí)例化,也就是說,不能new出來一個(gè)抽象類的對(duì)象(實(shí)例)。

  抽象方法(abstract method):使用abstract關(guān)鍵字所修飾的方法叫做抽象方法。抽象方法需要定義在抽象類中。相對(duì)于抽象方法,之前所定義的方法叫做具體方法(有聲明,有實(shí)現(xiàn))。

  如果一個(gè)類包含了抽象方法,那么這個(gè)類一定是抽象類。

  如果某個(gè)類是抽象類,那么該類可以包含具體方法(有聲明、有實(shí)現(xiàn))。

  如果一個(gè)類中包含了抽象方法,那么這個(gè)類一定要聲明成abstract class,也就是說,該類一定是抽象類;反之,如果某個(gè)類是抽象類,那么該類既可以包含抽象方法,也可以包含具體方法。

  無論何種情況,只要一個(gè)類是抽象類,那么這個(gè)類就無法實(shí)例化。

  在子類繼承父類(父類是個(gè)抽象類)的情況下,那么該子類必須要實(shí)現(xiàn)父類中所定義的所有抽象方法;否則,該子類需要聲明成一個(gè)abstract class。

  二、接口

  Java語言不支持一個(gè)類有多個(gè)直接的父類(多繼承),但現(xiàn)實(shí)例子中,又有很多類似于多繼承的例子,比如教師,他的父類既可以是人,也可以是父母,所以,在java中就用繼承來填充這個(gè)空缺,java不可以多繼承,但可以實(shí)現(xiàn)(implements)多個(gè)接口,間接的實(shí)現(xiàn)了多繼承。

  Java接口的特征歸納:

  1、Java接口中的成員變量默認(rèn)都是public,static,final類型的(都可省略),必須被顯示初始化,即接口中的成員變量為常量(大寫,單詞之間用"_"分隔)

  2、Java接口中的方法默認(rèn)都是public,abstract類型的(都可省略),沒有方法體,不能被實(shí)例化

  3、Java接口中只能包含public,static,final類型的成員變量和public,abstract類型的成員方法

  4、 接口中沒有構(gòu)造方法,不能被實(shí)例化

  5、 一個(gè)接口不能實(shí)現(xiàn)(implements)另一個(gè)接口,但它可以繼承多個(gè)其它的接口

  6、Java接口必須通過類來實(shí)現(xiàn)它的抽象方法 如:publicclass A implements B{...}

  7、 當(dāng)類實(shí)現(xiàn)了某個(gè)Java接口時(shí),它必須實(shí)現(xiàn)接口中的所有抽象方法,否則這個(gè)類必須聲明為抽象的

  8、不允許創(chuàng)建接口的實(shí)例(實(shí)例化),但允許定義接口類型的引用變量,該引用變量引用實(shí)現(xiàn)了這個(gè)接口的類的實(shí)例

  9、一個(gè)類只能繼承一個(gè)直接的父類,但可以實(shí)現(xiàn)多個(gè)接口,間接的實(shí)現(xiàn)了多繼承.

  10、通過接口,可以方便地對(duì)已經(jīng)存在的系統(tǒng)進(jìn)行自下而上的抽象,對(duì)于任意兩個(gè)類,不管它們是否屬于同一個(gè)父類,只有它們存在相同的功能,就能從中抽象出一個(gè)接口類型.對(duì)于已經(jīng)存在的繼承樹,可以方便的從類中抽象出新的接口,但從類中抽象出新的抽象類卻不那么容易,因此接口更有利于軟件系統(tǒng)的維護(hù)與重構(gòu).對(duì)于兩個(gè)系統(tǒng),通過接口交互比通過抽象類交互能獲得更好的松耦合.

  11,、接口是構(gòu)建松耦合軟件系統(tǒng)的重要法寶,由于接口用于描述系統(tǒng)對(duì)外提供的所有服務(wù),因此接口中的成員變量和方法都必須是public類型的,確保外部使用者能訪問它們,接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所有接口中的方法都是抽象方法,接口不涉及和任何具體實(shí)例相關(guān)的細(xì)節(jié),因此接口沒有構(gòu)造方法, 不能被實(shí)例化,沒有實(shí)例變量.

  三、它們的區(qū)別

  相同點(diǎn):

  1、代表系統(tǒng)的抽象層,當(dāng)一個(gè)系統(tǒng)使用一顆繼承樹上的類時(shí),應(yīng)該盡量把引用變量聲明為繼承樹的上層抽象類型,這樣可以提高兩個(gè)系統(tǒng)之間的松耦合

  2、都不能被實(shí)例化

  3、 都包含抽象方法,這些抽象方法用于描述系統(tǒng)能提供哪些服務(wù),但不提供具體的實(shí)現(xiàn)

  不同點(diǎn):

  1、在抽象類中可以為部分方法提供默認(rèn)的實(shí)現(xiàn),從而避免在子類中重復(fù)實(shí)現(xiàn)它們,這是抽象類的優(yōu)勢,但這一優(yōu)勢限制了多繼承,而接口中只能包含抽象方法.由于在抽象類中允許加入具體方法,因此擴(kuò)展抽象類的功能,即向抽象類中添加具體方法,不會(huì)對(duì)它的子類造成影響,而對(duì)于接口,一旦接口被公布,就必須非常穩(wěn)定,因?yàn)殡S意在接口中添加抽象方法,會(huì)影響到所有的實(shí)現(xiàn)類,這些實(shí)現(xiàn)類要么實(shí)現(xiàn)新增的抽象方法,要么聲明為抽象類

  2、 一個(gè)類只能繼承一個(gè)直接的父類,這個(gè)父類可能是抽象類,但一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,這是接口的優(yōu)勢,但這一優(yōu)勢是以不允許為任何方法提供實(shí)現(xiàn)作為代價(jià)的

  3、為什么Java語言不允許多重繼承呢?當(dāng)子類覆蓋父類的實(shí)例方法或隱藏父類的成員變量及靜態(tài)方法時(shí),Java虛擬機(jī)采用不同的綁定規(guī)則,假如還允許一個(gè)類有多個(gè)直接的父類,那么會(huì)使綁定規(guī)則更加復(fù)雜,

  因此,為了簡化系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和動(dòng)態(tài)綁定機(jī)制,Java語言禁止多重繼承.而接口中只有抽象方法,沒有實(shí)例變量和靜態(tài)方法,只有接口的實(shí)現(xiàn)類才會(huì)實(shí)現(xiàn)接口的抽象方法(接口中的抽象方法是通過類來實(shí)現(xiàn)的),因此,一個(gè)類即使有多個(gè)接口,也不會(huì)增加Java虛擬機(jī)進(jìn)行動(dòng)態(tài)綁定的復(fù)雜度.因?yàn)镴ava虛擬機(jī)永遠(yuǎn)不會(huì)把方法與接口綁定,而只會(huì)把方法與它的實(shí)現(xiàn)類綁定.

  4、使用接口和抽象類的總體原則:

  1)用接口作為系統(tǒng)與外界交互的窗口站在外界使用者(另一個(gè)系統(tǒng))的角度,接口向使用者承諾系統(tǒng)能提供哪些服務(wù),站在系統(tǒng)本身的角度,接口制定系統(tǒng)必須實(shí)現(xiàn)哪些服務(wù),接口是系統(tǒng)中最高層次的抽象類型.通過接口交互可以提高兩個(gè)系統(tǒng)之間的送耦合系統(tǒng)A通過系統(tǒng)B進(jìn)行交互,是指系統(tǒng)A訪問系統(tǒng)B時(shí),把引用變量聲明為系統(tǒng)B中的接口類型,該引用變量引用系統(tǒng)B中接口的實(shí)現(xiàn)類的實(shí)例。

  2)Java接口本身必須非常穩(wěn)定,Java接口一旦制定,就不允許隨遇更加,否則對(duì)外面使用者及系統(tǒng)本身造成影響

  3)用抽象類來定制系統(tǒng)中的擴(kuò)展點(diǎn)

  抽象類來完成部分實(shí)現(xiàn),還要一些功能通過它的子類來實(shí)現(xiàn)


【Java的抽象和接口】相關(guān)文章:

Java中接口和抽象類的異同08-12

理解Java的接口與抽象類06-22

接口和抽象類的區(qū)別05-09

java抽象技巧09-24

Java接口介紹09-07

java中spring的幾個(gè)重要類和接口09-10

java繼承抽象類07-28

java面向接口編程08-01

Java接口是什么07-21

Java圖形用戶接口09-04