當前位置:妙知谷 >

遊戲數碼 >IT技術 >

抽象類和接口的區別

抽象類和接口的區別

許多朋友搞不懂Java中抽象類和藉口的區別,今天我們就來分析一下。

操作方法

(01)接口,在表面上是由幾個沒有主體代碼的方法定義組成的集合體,有唯一的名稱,可以被類或其他接口所實現(或者也可以説繼承)。

抽象類和接口的區別

(02)接口是一組規則的集合,它規定了實現本接口的類或接口必須擁有的一組規則。體現了自然界“如果你是……則必須能……”的理念。接口是在一定粒度視圖上同類事物的抽象表示。注意這裏我強調了在一定粒度視圖上,因為“同類事物”這個概念是相對的,它因為粒度視圖不同而不同。

(03)關於抽象類與接口,如果單從具體代碼來看,對這兩個概念很容易模糊,甚至覺得接口就是多餘的,因為單從具體功能來看,除多重繼承外(C#,Java中),抽象類似乎完全能取代接口。但是,難道接口的存在是為了實現多重繼承?當然不是。抽象類和接口的區別在於使用動機。使用抽象類是為了代碼的複用,而使用接口的動機是為了實現多態性。所以,如果你在為某個地方該使用接口還是抽象類而猶豫不決時,那麼可以想想你的動機是什麼。

(04)總而言之,接口與抽象類的區別主要在於使用的動機,而不在於其本身。而一個東西該定義成抽象類還是接口,要根據具體環境的上下文決定。再者,接口和抽象類的另一個區別在於,抽象類和它的子類之間應該是一般和特殊的關係,而接口僅僅是它的子類應該實現的一組規則。(當然,有時也可能存在一般與特殊的關係,但我們使用接口的目的不在這裏)如,交通工具定義成抽象類,汽車、飛機、輪船定義成子類,是可以接受的,因為汽車、飛機、輪船都是一種特殊的交通工具。再譬如Icomparable接口,它只是説,實現這個接口的類必須要可以進行比較,這是一條規則。如果Car這個類實現了Icomparable,只是説,我們的Car中有一個方法可以對兩個Car的實例進行比較,可能是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但我們不能説“汽車是一種特殊的可以比較”,這在文法上都不通。

(05)Android中ListView作為開發最常用的組件之一,我們經常要使用自定義的Adapter來達到我們的目的,因此寫一個自己的BaseAdapter是很常見的事情,而重寫BaseAdapter的目的就是為了少寫重複代碼和實現自己想要的getview()函數,這裏我們看看這個抽象類:

抽象類和接口的區別 第2張

(06)我們再來看看接口,接口的目的是為了讓實現接口的對象一不同方式實現同一方法,而不是為了減少重複代碼,這裏舉一個Cache的代碼,這一接口是制定了緩存對象的規則,即實現緩存的對象必須要實現接口裏定義的方法,這樣才能保證緩存功能的完整:

抽象類和接口的區別 第3張
標籤: 抽象類 接口
  • 文章版權屬於文章作者所有,轉載請註明 https://miaozhigu.com/sm/itjishu/3303m.html