程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java接口和籠統類用法實例總結

Java接口和籠統類用法實例總結

編輯:關於JAVA

Java接口和籠統類用法實例總結。本站提示廣大學習愛好者:(Java接口和籠統類用法實例總結)文章只能為提供參考,不一定能成為您想要的結果。以下是Java接口和籠統類用法實例總結正文


本文實例講述了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.面向接口編程和面向對象編程是甚麼關系

起首,面向接口編程和面向對象編程其實不是平級的,它其實不是比面向對象編程更先輩的一種自力的編程思惟,而是從屬於面向對象思惟系統,屬於其一部門。或許說,它是面向對象編程系統中的思惟精華之一。

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的,也不消等造顯示器的,只需接口分歧,設計公道,完整可以並行停止開辟,從而進步效力。

本篇文章先到這裡。最初我想再煩瑣一句:面向對象的精華是模仿實際,這也能夠說是我這篇文章的魂魄。所以,多從實際中思慮面向對象的器械,對進步體系剖析設計才能年夜有脾益。

下篇文章,我將用一個實例來展現接口編程的根本辦法。

而第三篇,我將解析經典設計形式中的一些面向接口編程思惟,並解析一下.NET分層架構中的面向接口思惟。

對本文的彌補:

細心看了列位的答復,異常愉快能和年夜家一路評論辯論技巧成績。感激給出確定的同伙,也要感激提出看法和質疑的同伙,這促使我更深刻思慮一些器械,願望能借此提高。在這裡我想彌補一些器械,以評論辯論一些答復中比擬集中的成績。

1.關於“面向接口編程”中的“接口”與詳細面向對象說話中“接口”兩個詞

看到有同伙提出“面向接口編程”中的“接口”二字應當比純真編程說話中的interface規模更年夜。我經由思慮,認為很有事理。這裡我寫切實其實實不太公道。我想,面向對象說話中的“接口”是指詳細的一種代碼構造,例如C#頂用interface症結字界說的接口。而“面向接口編程”中的“接口”可以說是一種從軟件架構的角度、從一個更籠統的層面上指那種用於隱蔽詳細底層類和完成多態性的構造部件。從這個意義上說,假如界說一個籠統類,而且目標是為了完成多態,那末我以為把這個籠統類也稱為“接口”是公道的。然則用籠統類完成多態公道不公道?鄙人面第二條評論辯論。

歸納綜合來講,我認為兩個“接口”的概念既互相差別又互相接洽。“面向接口編程”中的接口是一種思惟層面的用於完成多態性、進步軟件靈巧性和可保護性的架構部件,而詳細說話中的“接口”是將這類思惟中的部件詳細實行到代碼裡的手腕。

2.關於籠統類與接口

看到答復中這是評論辯論的比擬劇烈的一個成績。很負疚我斟酌不周沒有在文章中評論辯論這個成績。我小我對這個成績的懂得以下:

假如單從詳細代碼來看,對這兩個概念很輕易隱約,乃至認為接口就是過剩的,由於單從詳細功效來看,除多重繼續外(C#,Java中),籠統相似乎完整能代替接口。然則,豈非接口的存在是為了完成多重繼續?固然不是。我以為,籠統類和接口的差別在於應用念頭。應用籠統類是為了代碼的復用,而應用接口的念頭是為了完成多態性。所以,假如你在為某個處所該應用接口照樣籠統類而遲疑未定時,那末可以想一想你的念頭是甚麼。

看到有同伙對IPerson這個接口的質疑,我小我的懂得是,IPerson這個接口該不應界說,症結看詳細運用中是怎樣個情形。假如我們的項目中有Women和Man,都繼續Person,並且Women和Man絕年夜多半辦法都雷同,只要一個辦法DoSomethingInWC()分歧(例子比擬粗鄙,列位見諒),那末固然界說一個AbstractPerson籠統類比擬公道,由於它可以把其他一切辦法都包括出來,子類只界說DoSomethingInWC(),年夜年夜削減了反復代碼量。

然則,假如我們法式中的Women和Man兩個類根本沒有配合代碼,並且有一個PersonHandle類須要實例化他們,而且不願望曉得他們是男是女,而只需把他們看成人對待,並完成多態,那末界說成接口就有需要了。

總而言之,接口與籠統類的差別重要在於應用的念頭,而不在於其自己。而一個器械該界說成籠統類照樣接口,要依據詳細情況的高低文決議。

再者,我以為接口和籠統類的另外一個差別在於,籠統類和它的子類之間應當是普通和特別的關系,而接口僅僅是它的子類應當完成的一組規矩。(固然,有時也能夠存在普通與特別的關系,但我們應用接口的目標不在這裡)如,交通對象界說成籠統類,汽車、飛機、汽船界說成子類,是可以接收的,由於汽車、飛機、汽船都是一種特別的交通對象。再比方Icomparable接口,它只是說,完成這個接口的類必需要可以停止比擬,這是一條規矩。假如Car這個類完成了Icomparable,只是說,我們的Car中有一個辦法可以對兩個Car的實例停止比擬,能夠是比哪輛車更貴,也能夠比哪輛車更年夜,這都無所謂,但我們不克不及說“汽車是一種特別的可以比擬”,這在文法上都欠亨。

願望本文所述對年夜家Java法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved