-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
為什么要定義接口(為什么要定義接口而不是直接實現(xiàn))
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于為什么要定義接口的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、j2ee項目里面service層里面為什么要建立一個接口,一個實現(xiàn)類
分別定義接口和實現(xiàn)類是java架構思想中開閉原則的體現(xiàn),對擴展開放,對修改關閉。舉個例子:假如你這個注冊剛開始是對國內(nèi)用戶開放,中國用戶注冊成功返回“注冊成功”,隨著業(yè)務擴展,需要海外用戶開放,假如美國用戶返回“register success”,如果你有接口,可以再美國的AmericaUserServiceImpl.java中實現(xiàn)一個UserService.java的接口,來定義美國用戶的注冊業(yè)務,而不是在之UserServiceImpl.java中增加if else來對不同邏輯進行處理,這樣,后續(xù)如果某個地區(qū)的注冊業(yè)務有變動,只需要修改對應地區(qū)的實現(xiàn)類,修改不會影響到其他地區(qū)的實現(xiàn)類,降低了耦合性。
對于小型項目來說,確實可以不用多寫一個接口,直接寫實現(xiàn)類就可以了。接口+實現(xiàn)類是一種良好的編碼習慣而已。就好像寫代碼時候的縮進和駝峰命名法。
二、Java中的接口可以定義成空接口嗎?如果可以,那為什么要定義成空接口?
Java中的接口可以定義成空接口嗎?
答:可以
如果可以,那為什么要定義成空接口?
答:可以起一個標記作用,既是像樓上說的Serializable一樣,它標志這個類可以被序列化而已.
可以通過這個標記接口來判斷某個類是否可以實現(xiàn)某種功能.
具體判斷方法如下
假設類A存在,標志接口Mark
if(Mark.class.isAssignableFrom(A.class)){....}
或
if(Mark.class.isInstance(new A())){....}
三、什么是接口?接口的主要功能是什么
是指同一計算機不同功能層之間的通信規(guī)則稱為接口。
主要功能是:對協(xié)定進行定義的引用類型。其他類型實現(xiàn)接口,以保證它們支持某些操作。接口指定必須由類提供的成員或?qū)崿F(xiàn)它的其他接口。與類相似,接口可以包含方法、屬性、索引器和事件作為成員。
擴展資料
Java里的接口:
Java里面由于不允許多重繼承,所以如果要實現(xiàn)多個類的功能,則可以通過實現(xiàn)多個接口來實現(xiàn)。
Java接口和Java抽象類代表的就是抽象類型,就是我們需要提出的抽象層的具體表現(xiàn)。OOP面向?qū)ο蟮木幊?,如果要提高程序的復用率,增加程序的可維護性,可擴展性,就必須是面向接口的編程,面向抽象的編程,正確地使用接口、抽象類這些太有用的抽象類型做為java結構層次上的頂層。
Java接口和Java抽象類最大的一個區(qū)別,就在于Java抽象類可以提供某些方法的部分實現(xiàn),而Java接口不可以,這大概就是Java抽象類唯一的優(yōu)點吧,但這個優(yōu)點非常有用。
四、c#中為什么要用接口
你要把接口也理解成一種類,比如有個基類叫baseClass,一個繼承他的類叫subClass,那么subClass也算是baseClass類型的,可以有這樣的寫法baseClass bc=new subClass()
接口也是一樣,如果一個類MyClass實現(xiàn)了借口一個接口interfaceClass,你事實上可以把MyClass叫做interfaceClass的子類,可以有這樣的寫法interfaceClass ic=new MyClass()
這就是所說的多態(tài)的一部分基礎??梢耘e個實在點的例子,比如你想寫一個方法叫EnumAll,參數(shù)是一個類的實例,作用是例舉出該實例中的每個子元素并打印出元素的ToString(如窗體的子元素是窗體中的控件,數(shù)組的子元素就不用說了吧),你就遇到兩個問題
首先EnumAll參數(shù)的類型是什么。參數(shù)應該可以是一個Form類型,因為窗口中有很多控件,使用EnumAll和一個Form的實例做參數(shù)可以打印出包含在該參數(shù)窗體中的每個控件的名字;但是一個數(shù)組Object[]類型應該也可以使用EnumAll方法,EnumAll可以列舉Object[]中的每個元素并打印。你是要把方法寫成void EnumAll(Form e)還是寫成void EnumAll(Object[] e)?
然后就是EnumAll怎樣實現(xiàn)才能得到不同類型的實例的子元素?如果是void EnumAll(Form e)的形式,要想得到子元素要用
foreach(Control c in e.Controls)
{
Console.WriteLine(c.ToString());
}
的寫法,如果數(shù)組要用
for(int i=0;i<e.length;++i)
{
Console.WriteLine(e[i].ToString());
}
的實現(xiàn)方法。
Form和Object[]是兩種完全不沾邊的類型,那么EnumAll到底該怎么寫?
這時就可以使用接口,可以定義一個接口
interface IEnumable
{
Object next();//返回下一個子元素的方法
}
然后使Form和Object[]類型都實現(xiàn)IEnumable接口(實現(xiàn)方法是不同的,如前面所說),然后這樣寫EnumAll方法:
void EnumAll(IEnumable e)//一開始就說了,實現(xiàn)接口的類都可以算是接口的子類
{Object o;
while((o=e.next)!=null)
{
Console.WriteLine(o.ToString());
}
}
于是解決了上面的問題。
不知道有沒有說清楚,如果理解了上面舉的例子算是初步了解接口了,接口的多繼承和多態(tài)性還有很多內(nèi)容。
另外,上面的東西只是舉例子,雖然C#中確實有IEnumable接口,但其定義要復雜的多,我只是舉個簡化的自己編的例子^_^。C#的(應該說是FCL吧)很多類都實現(xiàn)了IEnumalbe接口,像集合類和數(shù)組等。
FCL是.NET框架類庫,F(xiàn)ramework Class Library,不論在C#,J#,VB.NET或其他.NET開發(fā)語言中使用的.NET提供的類都是FCL中的類,就是說,.NET的開發(fā)其實是和語言無關的。不同語言編寫的程序由于使用同一類庫(其實等于被翻譯成了同一種中間語言,Common Intermediate Language, CIL),使得各種不同語言寫的程序集可以通用。
以上就是關于為什么要定義接口相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
為什么很多人喜歡學化學(為什么很多人喜歡學化學專業(yè))
微店顯示請聯(lián)系買家微信認證(微店買家為什么要身份驗證)