第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Runnable 之類的接口有何獨(dú)特之處?

Runnable 之類的接口有何獨(dú)特之處?

大話西游666 2022-06-23 09:23:21
我對(duì) java/android 中接口的理解是它們用于確保使用成員函數(shù)。例如,像Runnable一樣,它確保實(shí)現(xiàn)的類run()使用Runnable.但是,這些功能有何獨(dú)特之處?假設(shè)有另一個(gè)接口,比如Runnable只有 1 個(gè)成員函數(shù) - 讓我們稱之為Passable- 它有 1 個(gè)成員函數(shù)調(diào)用pass()。這兩個(gè)接口到底有什么不同(除了名稱不同)?還是名稱使它們與眾不同?例如,Android 檢測(cè)該類是否被調(diào)用Runnable,然后它會(huì)做一些不同的事情。
查看完整描述

2 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

接口不用于定義調(diào)用什么方法。

接口的主要功能之一是將 API 與實(shí)現(xiàn)分離。例如,這意味著任何實(shí)現(xiàn) Runnable 的類都可以用于在并行線程中運(yùn)行。另一種是在繼承范圍之外定義一個(gè)類的類型。

來(lái)自有效java的引用:

Java 編程語(yǔ)言提供了兩種機(jī)制來(lái)定義允許多種實(shí)現(xiàn)的類型:接口和抽象類。這兩種機(jī)制之間最明顯的區(qū)別是允許抽象類包含某些方法的實(shí)現(xiàn),而接口則不允許。一個(gè)更重要的區(qū)別是,要實(shí)現(xiàn)抽象類定義的類型,類必須是抽象類的子類。任何定義了所有必需方法并遵守通用約定的類都可以實(shí)現(xiàn)接口,無(wú)論該類位于類層次結(jié)構(gòu)中的哪個(gè)位置。因?yàn)?Java 只允許單繼承,所以對(duì)抽象類的這種限制嚴(yán)重限制了它們作為類型定義的使用

通過(guò)實(shí)現(xiàn) Runnable 接口,您不會(huì)告訴代碼應(yīng)該調(diào)用 run 方法。您正在告訴代碼您的類是 Runnable 的一種類型,或者從字面上看,您的類是可運(yùn)行的。

如果您要使用抽象類,則可以使用一個(gè)示例用法:Plant. 現(xiàn)在您將使用這個(gè)類來(lái)定義植物的一些常見(jiàn)屬性(例如它們需要土壤),然后您將創(chuàng)建它的子類PotatoRosemary,Dandelion

現(xiàn)在假設(shè)你想指出這些植物中的哪一種是可食用的,你可以創(chuàng)建一個(gè)中間子類EdiblePlant,它是 Plant 的子類和可食用類的超類。EdiblePlant有一個(gè)方法叫做eat(),因此你可以吃所有可食用的植物。

現(xiàn)在,如果您還想擁有一個(gè)類Animal及其子類DogCowPig. 您將再次必須指出哪個(gè)可以被新的中間類食用,EdibleAnimal它又會(huì)有一個(gè)eat()方法。

我想這似乎沒(méi)有那么多工作,但現(xiàn)在如果你想擁有Human,誰(shuí)吃?

你必須同時(shí)擁有Human.eat(EdibleAnimal animal);方法和Human.eat(EdiblePlant plant)方法。因?yàn)槲覀兛梢酝瑫r(shí)吃這兩個(gè)。

相反,我們可以定義一個(gè)Edible具有方法的接口eat()。這種類型表明實(shí)現(xiàn)這種類型的類(植物和動(dòng)物)實(shí)際上可以被吃掉。

既然現(xiàn)在我們有一個(gè)可食用的通用類型,我們可以簡(jiǎn)單地在 Human 上使用一種吃方法,Human.eat(Edible food)

由于我們現(xiàn)在有一個(gè)分離的接口和實(shí)現(xiàn),我們不再考慮如何重構(gòu)/添加新方法Human,我們只需要適當(dāng)?shù)貙?shí)現(xiàn)Edible類型。

我建議在開(kāi)始 Android 開(kāi)發(fā)之前閱讀 Java 的工作原理,如果你不這樣做,你可以形成這些關(guān)于事物如何工作的糟糕理論模型,例如,interface determines what methods will be called當(dāng)它與 Java 的實(shí)際工作原理發(fā)生沖突時(shí),你會(huì)感到沮喪,并且不明白為什么你寫的東西不像“預(yù)期的”那樣工作。


查看完整回答
反對(duì) 回復(fù) 2022-06-23
?
元芳怎么了

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊

兩個(gè)接口可以具有相同的“內(nèi)容”,例如相同數(shù)量的方法和匹配的方法簽名。

由于名稱不同,它們?nèi)匀?em>不同。您甚至可能有同名的接口(或類!),只是在包名稱上有所不同。例如,有多個(gè)名為 Pair 的不同類。

但是接口并不能確定調(diào)用了哪些方法。你編寫的代碼選擇一個(gè)方法并調(diào)用它,而某個(gè)類實(shí)現(xiàn)了一個(gè)特定接口的事實(shí)只是告訴你:“好的,它是一個(gè) Runnable,所以我可以并且可能想要調(diào)用它的 run 方法”。

你看,Java 是一種靜態(tài)編譯的語(yǔ)言。這意味著您使用類型來(lái)傳達(dá)意圖。您有一些代碼應(yīng)該由統(tǒng)一的,可能是多線程的上下文中的其他代碼自己調(diào)用?然后您考慮將該代碼放入 Runnable 中。這就是全部。


查看完整回答
反對(duì) 回復(fù) 2022-06-23
  • 2 回答
  • 0 關(guān)注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)