无码专区一VA亚洲V专区在线,一本色道久久HEZYO无码,熟妇高潮精品一区二区三区,亚洲AV成人无码久久精品

java為什么要設計iterface,是為了盡可能替代類的繼承嗎?

admin 184 0

你好,你的問題包含了兩個小問題,①java設計interface的原因?②是不是為了盡可能替代類的繼承?

接口與繼承分別是什么?(定義)

接口是一系列方法的聲明,比如方法名、參數、返回值等信息,接口中的方法不實現,這些方法可以在不同的地方被不同的類實現。

繼承就是子類繼承父類的特征和行為,使得子類具有父類的實例域和方法。

接口與繼承的設計原因是什么?(用處)

接口的主要作用在于降低代碼的耦合度,屏蔽實現層,比如前后端接口交互的時候,大家約定好接口層就可以互不影響的干活了,至于接口實現后端可以慢慢做。

繼承的主要作用在于,在已有基礎上繼續進行功能的擴充①清晰體現相關類間的層次結構關系②減小代碼的冗余度,大大增加程序的重用性。

接口與繼承有什么區別?

①定義的修飾符不同(interface),(extends)

②接口中只能定義全局常量和抽象方法,而在繼承中可以定義屬性方法,變量,常量等。

③接口被類實現時,在類中一定要實現接口中的所有方法,而繼承可以調用指定方法。

④繼承只能繼承一個類,但implements可以實現多個接口,用逗號分開就行了 。

綜上所述,java中接口與類繼承各有自己存在的原因,有自己的適用場合,有區別也有一定的聯系,可以根據自己的具體需求來選擇。

繼承代價太大,強制你把父類的所有東西都拿過來,不然就不準使用,這種將方法和屬性強耦合的方式容易導致類繼承多了到后面積重難返。使用鴨子類型(接口)能避免一部分繼承的缺陷,go里甚至直接繼承都沒有了,只有接口。

java為什么要設計iterface,是為了盡可能替代類的繼承嗎?-第1張圖片-贊晨新材料

以前我們把物體抽象,大象抽象是動物,動物抽象是生物,這樣本身就把對象的內容和行為綁定了,比如大象會噴水,就給大象加個噴水的方法,但是如果魚也會噴水,噴水這個方法又不能放到動物類里,那么基于大象和魚的噴水方法實現的上層方法就無法復用,這兩個噴水在編譯器看來是沒有任何關系的。

開始人們想到搞一個噴水動物類,繼承動物類,大象和魚再繼承噴水動物類。但是這樣終究治標不治本,再有其他的變化,繼承鏈又要修改。

因為實際上我們使用對象,都是在使用其方法(屬性其實也應該算方法)。

我對面向對象程序過程的理解,這個過程實際上就是讓對象之間使用方法互發消息進行通信和動作,最終完成工作。

大家都知道的一句話,上層應該依賴抽象而不是依賴細節,然而依賴一個基類,本身已經依賴這個基類的實現細節,基類要求有個int成員,那么任何子類無論如何都需要有個int成員。那么理應將方法抽象出來,而不去關心其到底是什么,因為我們并不使用對象內部的內容,我們只使用方法。

比如有個iwriteable接口,表示對象可以按字節寫入,那么上層的代碼就不用管寫的到底是什么了,只要能寫就行,就可以基于這個iwriteable接口里的方法,寫出例如寫字符串,寫圖片等方法。任何實現了這個接口的類,都可以復用這些寫字符串,寫圖片的代碼。

那么就有人要問了,那如果我確實要求要有個int成員,因為我上層代碼要使用呢?那么根據前面說的,屬性也是方法,你應該再定義一個接口,比如這個int存的是年齡,那么就來個haveage接口并實現它。調用的地方可以要求對象實現哪幾個接口,這樣也能獲取需要的屬性。

這么一來,連屬性都沒有了,那么繼承也可以沒有了,畢竟你要求的不是基類了,是一個或多個接口的組合了,所以你可以看到,接口替代繼承是很自然的,而不是什么刻意而為的,是更高級抽象的體現。事實上基于自然規則的那套大象是動物,動物是生物的那套面向對象規則,在程序設計里并不好用。所以如果讓我介紹面向對象,我不會講這些例子。

這個問題很有意思。雖然有一些場景,使用繼承和接口都可以實現,但是接口的存在絕對不僅僅是代替類的繼承。

首先繼承和接口的區別很明顯,用通俗的話來講,接口好比一個人的老師,會告訴你要做什么(實現接口要實現接口中的方法),而繼承就好比是親爹,會把所有的都給你(子類可以調用父類提供的方法),一個人可以有多個老師,但是只有一個親爹(接口可以實現多個,類只可以繼承一個)。

那么再來說說接口存在的意義。簡單的理解在Java中接口相當于是定義了規范,而這些規范可以嚴格控制每個實現的功能。最明顯的應用就是JavaEE,JavaEE中只定義了各種接口,并沒有實現,而我們平時所使用的基本都是一些實現了這些接口的第三方類,比如tomcat的。

另外接口的存在也使得應用的可維護性和擴展性變得更強,比如,在一個應用中使用了MySQL數據庫,然后未來某一時間想要更換成其他數據庫,那么就只需要學一個其他數據庫的類實現數據庫接口就可以無縫切換了。

此外還有一個很重要的點,接口是Java程序中解耦的重要手段。相反的類的繼承是確實增加了耦合度。

所以說,Java中接口的存在是很有必要的。

抱歉,評論功能暫時關閉!

請先 登錄 再評論,若不是會員請先 注冊