抽象類和接口的區別
許多朋友搞不懂Java中抽象類和藉口的區別,今天我們就來分析一下。
操作方法
(01)接口,在表面上是由幾個沒有主體代碼的方法定義組成的集合體,有唯一的名稱,可以被類或其他接口所實現(或者也可以説繼承)。
(02)接口是一組規則的集合,它規定了實現本接口的類或接口必須擁有的一組規則。體現了自然界“如果你是……則必須能……”的理念。接口是在一定粒度視圖上同類事物的抽象表示。注意這裏我強調了在一定粒度視圖上,因為“同類事物”這個概念是相對的,它因為粒度視圖不同而不同。
(03)關於抽象類與接口,如果單從具體代碼來看,對這兩個概念很容易模糊,甚至覺得接口就是多餘的,因為單從具體功能來看,除多重繼承外(C#,Java中),抽象類似乎完全能取代接口。但是,難道接口的存在是為了實現多重繼承?當然不是。抽象類和接口的區別在於使用動機。使用抽象類是為了代碼的複用,而使用接口的動機是為了實現多態性。所以,如果你在為某個地方該使用接口還是抽象類而猶豫不決時,那麼可以想想你的動機是什麼。
(04)總而言之,接口與抽象類的區別主要在於使用的動機,而不在於其本身。而一個東西該定義成抽象類還是接口,要根據具體環境的上下文決定。再者,接口和抽象類的另一個區別在於,抽象類和它的子類之間應該是一般和特殊的關係,而接口僅僅是它的子類應該實現的一組規則。(當然,有時也可能存在一般與特殊的關係,但我們使用接口的目的不在這裏)如,交通工具定義成抽象類,汽車、飛機、輪船定義成子類,是可以接受的,因為汽車、飛機、輪船都是一種特殊的交通工具。再譬如Icomparable接口,它只是説,實現這個接口的類必須要可以進行比較,這是一條規則。如果Car這個類實現了Icomparable,只是説,我們的Car中有一個方法可以對兩個Car的實例進行比較,可能是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但我們不能説“汽車是一種特殊的可以比較”,這在文法上都不通。
(05)Android中ListView作為開發最常用的組件之一,我們經常要使用自定義的Adapter來達到我們的目的,因此寫一個自己的BaseAdapter是很常見的事情,而重寫BaseAdapter的目的就是為了少寫重複代碼和實現自己想要的getview()函數,這裏我們看看這個抽象類:
(06)我們再來看看接口,接口的目的是為了讓實現接口的對象一不同方式實現同一方法,而不是為了減少重複代碼,這裏舉一個Cache的代碼,這一接口是制定了緩存對象的規則,即實現緩存的對象必須要實現接口裏定義的方法,這樣才能保證緩存功能的完整:
-
華為悦盒看電視直播
華為悦盒內置的程序中並沒有看電視直播的軟件,安裝一個電視家即可,讓小編教給你安裝指南。操作方法(01)將電視與華為悦盒用數據線連接好後,打開電視機和華為悦盒的電源,等待系統啟動。(02)在電腦上將下載好的電視直播程序存放到U盤上,並將U盤插入到華為悦盒上。(03)在華為...
-
百度雲使用磁鏈接
百度雲現在已經更名為百度網盤。百度網盤不僅存儲功能強大,而且下載功能也很強大。今天小編就告訴大家如何用百度網盤網頁版和百度網盤手機客户端下載磁力鏈接。百度網盤手機客户端下載磁力鏈接方法(01)首先打開我們的百度網盤手機客户端,點擊進入右下角菜單欄的更...
-
HTML,如何製作導航欄?
在用html做一個網頁時,首先需要處理的是導航欄了。怎樣製作一個導航欄?以前的做法基本都是用table來做,現在我們用無序列表ul來做,下面一起來看下。操作方法(01)首先我們寫html代碼,就是用ul,li無序列表來放置我們的菜單項,代碼如圖。(02)運行目前的代碼,可以看到是一個比...
-
Excel中根據身份證號求年齡性別和出生日期
在excel中怎麼根據身份證號來求得年齡性別和出生日期,讓小編教給你操作指南。判斷性別公式:(01)首先讓小編打開一個工作樣表作為例子。如圖所示:(02)在C26單元格中輸入公式:=IF(MOD(MID(B26,17,1),2),"男","女")來判別男女。如圖所示:(03)下拉填充公式至所有人員行,如圖所...