亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Runnable 之類的接口有何獨特之處?

Runnable 之類的接口有何獨特之處?

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

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

接口不用于定義調用什么方法。

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

來自有效java的引用:

Java 編程語言提供了兩種機制來定義允許多種實現的類型:接口和抽象類。這兩種機制之間最明顯的區別是允許抽象類包含某些方法的實現,而接口則不允許。一個更重要的區別是,要實現抽象類定義的類型,類必須是抽象類的子類。任何定義了所有必需方法并遵守通用約定的類都可以實現接口,無論該類位于類層次結構中的哪個位置。因為 Java 只允許單繼承,所以對抽象類的這種限制嚴重限制了它們作為類型定義的使用

通過實現 Runnable 接口,您不會告訴代碼應該調用 run 方法。您正在告訴代碼您的類是 Runnable 的一種類型,或者從字面上看,您的類是可運行的。

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

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

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

我想這似乎沒有那么多工作,但現在如果你想擁有Human,誰吃?

你必須同時擁有Human.eat(EdibleAnimal animal);方法和Human.eat(EdiblePlant plant)方法。因為我們可以同時吃這兩個。

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

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

由于我們現在有一個分離的接口和實現,我們不再考慮如何重構/添加新方法Human,我們只需要適當地實現Edible類型。

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


查看完整回答
反對 回復 2022-06-23
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

兩個接口可以具有相同的“內容”,例如相同數量的方法和匹配的方法簽名。

由于名稱不同,它們仍然不同。您甚至可能有同名的接口(或類?。皇窃诎Q上有所不同。例如,有多個名為 Pair 的不同類。

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

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


查看完整回答
反對 回復 2022-06-23
  • 2 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號