蜜桃33d,欧美极品欧美精品欧美图片,在线aⅴ亚洲中文字幕,被两个两个黑人吃奶4P

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

admin 204 0

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

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

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

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

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

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

繼承的主要作用在于,在已有基礎(chǔ)上繼續(xù)進行功能的擴充①清晰體現(xiàn)相關(guān)類間的層次結(jié)構(gòu)關(guān)系②減小代碼的冗余度,大大增加程序的重用性。

接口與繼承有什么區(qū)別?

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

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

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

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

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

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

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

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

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

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

我對面向?qū)ο蟪绦蜻^程的理解,這個過程實際上就是讓對象之間使用方法互發(fā)消息進行通信和動作,最終完成工作。

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

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

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

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

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

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

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

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

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

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

抱歉,評論功能暫時關(guān)閉!

請先 登錄 再評論,若不是會員請先 注冊
99e热久久免费精品首页| 99热这里有精品| 亚洲午夜精品一区二区 | 蜜桃精品免费久久久久影院| 黑人大荫蒂高潮视频| 亚洲国产日本韩国欧美mv| 伊人中文| 日韩免费黄片| 国产乱色国产精品免费视频| 国产18禁黄网站免费观看| 99免费A级毛片18禁网站免费| 欧美一级a一级a爱片免费| 日韩 无码 偷拍 中文字幕| 亚洲国产精品无码成人片久久| 久久99精品福利久久久久久| 久久综合色鬼综合色| 星辰视频在线观看电影| 欧妇女乱妇女乱视频| 国产口爆吞精在线视频| 无码精品国产一区二区免费| 武隆县| 97超碰资源总站| 欧美精品欧美极品欧美激情| 欧美日韩一区二区四区| 国产免费无码一区二区视频| 人妻AV中文字幕无码专区| 又大又湿又紧又爽a视频| 久久久久久无码AV成人影院| 国内大量揄拍人妻精品視頻| 久久婷婷五月综合色首页| gogo大胆少妇大胆艺术| 国产黄a三级三级三级| 公和我在野外做好爽爱爱| 久久精视频| 成年午夜精品久久久精品| 日韩精品无码中文字幕一区二区| 亚洲成A人片在线观看日本| 亚洲国产成人无码av在线| 日本免费人成视频在线观看| 久久这里只有精品青草| 影音先锋女人av女色资源|