国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java接口和抽象類用法實例總結

2019-11-26 14:44:33
字體:
來源:轉載
供稿:網友

本文實例講述了Java接口和抽象類用法。分享給大家供大家參考,具體如下:

接口

1 因為java不支持多重繼承,所以有了接口,一個類只能繼承一個父類,但可以實現多個接口,接口本身也可以繼承多個接口。

2 接口里面的成員變量默認都是public static final類型的。必須被顯示的初始化。

3 接口里面的方法默認都是public abstract類型的。隱式聲明。

4 接口沒有構造方法,不能被實例化。

5 接口不能實現另一個接口,但可以繼承多個接口。

6 類如果實現了一個接口,那么必須實現接口里面的所有抽象方法,否則類要被定義為抽象類。

抽象類

1 如果將一個類聲明為abstract,此類不能生成對象,只能被繼承使用。

2  抽象方法必須存在于抽象類中。

3  抽象類中可以有一般的變量和一般的方法。

4 子類繼承抽象類必須實現其中抽象方法,除非子類為抽象類。
   private void print(){};此語句表示方法的空實現。
   abstract void print(); 此語句表示方法的抽象,無實現。

接口和抽象類的區別

1 接口只能包含抽象方法,抽象類可以包含普通方法。
2 接口只能定義靜態常量屬性,抽象類既可以定義普通屬性,也可以定義靜態常量屬性。
3 接口不包含構造方法,抽象類里可以包含構造方法。    

抽象類不能被實例化,但不代表它不可以有構造函數,抽象類可以有構造函數,備繼承類擴充

1 接口是核心,其定義了要做的事情,包含了許多的方法,但沒有定義這些方法應該如何做。
2 如果許多類實現了某個接口,那么每個都要用代碼實現那些方法
3 如果某一些類的實現有共通之處,則可以抽象出來一個抽象類,讓抽象類實現接口的公用的代碼,而那些個性化的方法則由各個子類去實現。

所以,抽象類是為了簡化接口的實現,他不僅提供了公共方法的實現,讓你可以快速開發,又允許你的類完全可以自己實現所有的方法,不會出現緊耦合的問題。

應用場合很簡單了
1 優先定義接口
2 如果有多個接口實現有公用的部分,則使用抽象類,然后集成它。

接口和抽象類的區別 --相信你看完不會再混淆了

我想,對于各位使用面向對象編程語言的程序員來說,“接口”這個名詞一定不陌生,但是不知各位有沒有這樣的疑惑:接口有什么用途?它和抽象類有什么區別?能不能用抽象類代替接口呢?而且,作為程序員,一定經常聽到“面向接口編程”這個短語,那么它是什么意思?有什么思想內涵?和面向對象編程是什么關系?本文將一一解答這些疑問。

1.面向接口編程和面向對象編程是什么關系

首先,面向接口編程和面向對象編程并不是平級的,它并不是比面向對象編程更先進的一種獨立的編程思想,而是附屬于面向對象思想體系,屬于其一部分?;蛘哒f,它是面向對象編程體系中的思想精髓之一。

2.接口的本質

接口,在表面上是由幾個沒有主體代碼的方法定義組成的集合體,有唯一的名稱,可以被類或其他接口所實現(或者也可以說繼承)。它在形式上可能是如下的樣子:

interface InterfaceName {   void Method1();   void Method2(int para1);   void Method3(string para2,string para3); } 

那么,接口的本質是什么呢?或者說接口存在的意義是什么。我認為可以從以下兩個視角考慮:

1)接口是一組規則的集合,它規定了實現本接口的類或接口必須擁有的一組規則。體現了自然界“如果你是……則必須能……”的理念。

例如,在自然界中,人都能吃飯,即“如果你是人,則必須能吃飯”。那么模擬到計算機程序中,就應該有一個IPerson(習慣上,接口名由“I”開頭)接口,并有一個方法叫Eat(),然后我們規定,每一個表示“人”的類,必須實現IPerson接口,這就模擬了自然界“如果你是人,則必須能吃飯”這條規則。

從這里,我想各位也能看到些許面向對象思想的東西。面向對象思想的核心之一,就是模擬真實世界,把真實世界中的事物抽象成類,整個程序靠各個類的實例互相通信、互相協作完成系統功能,這非常符合真實世界的運行狀況,也是面向對象思想的精髓。

2)接口是在一定粒度視圖上同類事物的抽象表示。注意這里我強調了在一定粒度視圖上,因為“同類事物”這個概念是相對的,它因為粒度視圖不同而不同。

例如,在我的眼里,我是一個人,和一頭豬有本質區別,我可以接受我和我同學是同類這個說法,但絕不能接受我和一頭豬是同類。但是,如果在一個動物學家眼里,我和豬應該是同類,因為我們都是動物,他可以認為“人”和“豬”都實現了IAnimal這個接口,而他在研究動物行為時,不會把我和豬分開對待,而會從“動物”這個較大的粒度上研究,但他會認為我和一棵樹有本質區別。

現在換了一個遺傳學家,情況又不同了,因為生物都能遺傳,所以在他眼里,我不僅和豬沒區別,和一只蚊子、一個細菌、一顆樹、一個蘑菇乃至一個SARS病毒都沒什么區別,因為他會認為我們都實現了IDescendable這個接口(注:descend vi. 遺傳),即我們都是可遺傳的東西,他不會分別研究我們,而會將所有生物作為同類進行研究,在他眼里沒有人和病毒之分,只有可遺傳的物質和不可遺傳的物質。但至少,我和一塊石頭還是有區別的。

可不幸的事情發生了,某日,地球上出現了一位偉大的人,他叫列寧,他在熟讀MAX、恩格斯的辯證唯物主義思想巨著后,頗有心得,于是他下了一個著名的定義:所謂物質,就是能被意識所反映的客觀實在。至此,我和一塊石頭、一絲空氣、一條成語和傳輸手機信號的電磁場已經沒什么區別了,因為在列寧的眼里,我們都是可以被意識所反映的客觀實在。如果列寧是一名程序員,他會這么說:所謂物質,就是所有同時實現了“IReflectabe”和“IEsse”兩個接口的類所生成的實例。(注:reflect v. 反映  esse n. 客觀實在)

也許你會覺得我上面的例子像在瞎掰,但是,這正是接口得以存在的意義。面向對象思想和核心之一叫做多態性,什么叫多態性?說白了就是在某個粒度視圖層面上對同類事物不加區別的對待而統一處理。而之所以敢這樣做,就是因為有接口的存在。像那個遺傳學家,他明白所有生物都實現了IDescendable接口,那只要是生物,一定有Descend()這個方法,于是他就可以統一研究,而不至于分別研究每一種生物而最終累死。

可能這里還不能給你一個關于接口本質和作用的直觀印象。那么在后文的例子和對幾個設計模式的解析中,你將會更直觀體驗到接口的內涵。

3.面向接口編程綜述

通過上文,我想大家對接口和接口的思想內涵有了一個了解,那么什么是面向接口編程呢?我個人的定義是:在系統分析和架構中,分清層次和依賴關系,每個層次不是直接向其上層提供服務(即不是直接實例化在上層中),而是通過定義一組接口,僅向上層暴露其接口功能,上層對于下層僅僅是接口依賴,而不依賴具體類。

這樣做的好處是顯而易見的,首先對系統靈活性大有好處。當下層需要改變時,只要接口及接口功能不變,則上層不用做任何修改。甚至可以在不改動上層代碼時將下層整個替換掉,就像我們將一個WD的60G硬盤換成一個希捷的160G的硬盤,計算機其他地方不用做任何改動,而是把原硬盤拔下來、新硬盤插上就行了,因為計算機其他部分不依賴具體硬盤,而只依賴一個IDE接口,只要硬盤實現了這個接口,就可以替換上去。從這里看,程序中的接口和現實中的接口極為相似,所以我一直認為,接口(interface)這個詞用的真是神似!

使用接口的另一個好處就是不同部件或層次的開發人員可以并行開工,就像造硬盤的不用等造CPU的,也不用等造顯示器的,只要接口一致,設計合理,完全可以并行進行開發,從而提高效率。

本篇文章先到這里。最后我想再

主站蜘蛛池模板: 上虞市| 手游| 芦溪县| 蒲城县| 海原县| 辰溪县| 依安县| 宁陵县| 武隆县| 溆浦县| 赤壁市| 正镶白旗| 萨迦县| 荣昌县| 芜湖县| 昭通市| 周口市| 中西区| 若羌县| 什邡市| 东辽县| 云安县| 天等县| 古蔺县| 远安县| 晋宁县| 澄城县| 六安市| 荔浦县| 柳江县| 义乌市| 甘谷县| 长葛市| 闸北区| 望江县| 定陶县| 万盛区| 绥宁县| 江永县| 本溪市| 彩票|