蜜桃33d,久久久午夜精品福利内容,亚洲精品无码av人在线观看,微拍福利一区二区

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)閉!

請先 登錄 再評論,若不是會員請先 注冊
欧美精品一区二区三区色| 精品亚洲成a人7777在线观看| 日韩电影| 日韩黄色小说| 国产成人网av91www| 久久人人玩人妻潮喷内射人人| 亚洲AV无码片在线播放仙踪林| 久久久婷婷五月亚洲97号色| 亚洲精品9999久久久久无码| 人妻无码免费一区二区三区| 日本按摩高潮a级中文片| 国产精品免费大片| 伊人久久大香线蕉亚洲五月天| 亚洲av无码专区青青草原| 无码精品人妻一区二区三区98| 亚洲中文在线精品国产| 欧美精品videosse精子| 国产精品视频YY9299| 国产又黄又湿无遮挡免费视频| 久久精品国产999久久久| 国产精品视频分类精品| 亚洲无亚洲人成网站77777| 国产成人综合怡春院精品| 国产无遮挡又黄又爽又色学生| 蜜桃视频在线| www深夜成人白色液体| 久久精品噜噜噜成人| 国产亚洲精品久久www| 国产精品久久久久久精品三级古代| 亚洲va久久久学生av热影院| 精品国产乱码一区二区三区 | 国产精品夜色一区二区三区| 国产亚洲精品无码不卡| 秋霞A级毛片在线看| 香蕉视频chicbanana| 中文字幕av一区二区人妻| 国产精品揄拍100视频| 八戒影院| 精品一区二区三区久久久| 一二三区免费看成人av视频| 欧美12一14sex性hd|