簡體   English   中英

Dart:Dart 中的實現和擴展有什么區別

[英]Dart: What is the difference between implements and extends in Dart

https://dart.dev/guides/language/language-tour#implicit-interfaces

我見過使用“實現”的代碼,所以我正在研究“實現”。 但是通過查看官方文檔,我無法真正分辨出與擴展的區別。

查看官方文檔(上一頁)中的示例代碼,看起來它只是在做它可以用擴展實現的功能。 然后我想知道它是否應該使用“擴展”。 我想到目前為止我已經了解了繼承(擴展)和混合(與)。 Dart文檔中也提到了“接口”這個詞,但是對“接口”有明確的定義。 我什至找不到它在哪里。 我對其他語言的接口了解不多,所以很難得到圖像。

繼承和實現之間究竟有什么區別? 因為區別,什么時候用繼承“extends”,什么時候用實現“implements”?

樣本中是否有明顯不同的地方?

給定類MyClass

  • MyClass extends Foo是經典的繼承。 MyClass是一個Foo
  • MyClass implements Bar聲明實現者符合Bar接口。 MyClass “看起來”像一個Bar
  • MyClass with Batz在接口和實現中是“混合”的。 MyClass “行為”就像一個Batz

MyClass可以根據需要實現和混合盡可能多的接口(有一些限制),但只能從一個接口擴展。

除了其他解釋外,dart 不允許開發人員使用多重繼承,因此可以只有一個extends ,但是可以有多個implements
因此,一個類只能是一個類的子類型(父類的父類除外),但接口定義了實現它的類的行為,一個類可以有不同的行為。

一個簡單的類比來自動物。 如果我們假設動物有不同的行為,例如游泳界面為 ISwimmer,運行界面為 IRunner,飛行界面為 IFlyer。 例如,魚類動物。 這使得它擴展了 Animal 類。 此外,魚具有游泳行為,因此它為此目的實現了 ISwimmer 接口。

如果您只想了解它們在概念上的不同之處,那么

你擴展一個類。 當您擴展您的父親或您的父親是您的基類時,可以考慮一下。

您實現了一個接口(這只是一個純粹的抽象類)。 就像法拉利實施汽車一樣。

接口不能有實例。 例如 - 你見過任何汽車嗎? 答案是否定的,您已經看到了實現 CAR 的汽車類型,即福特、豐田,因此汽車充當其他公司或您可以說類(法拉利)實現的接口。

你必須實現汽車的每一個特性才能被稱為汽車,這就是為什么接口的每個方法都需要實現,我們說 x “實現” y。

在擴展中,您可以覆蓋某些內容並跳過另一個內容,假設您的鼻子可能看起來像您的父親,但您的耳朵卻不是。

將接口視為骨架或只是一個空類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM