Groovyの特性、継承、インターフェース、いつ使用するのですか?


10

私はGroovyを学んでいて、2.3で追加された新機能であるTraitsの追加について学びました。今の私には、Traitsを使用すると、基本的にスーパークラスとインターフェイスで実行できるすべてのことを実行できるように見えます。

Groovyにトレイトを追加すると、継承とインターフェースが廃止されますか?

そうでない場合、これらの各メカニズムを使用するのに最適な時期はいつですか?



「groovyと私は2.3で追加された新機能、つまりトレイトの追加について学習しました」-トレイトは、Groovy ++ブースターと呼ばれるASTアドオンを介して2.0より前のGroovyに最初に追加されました。code.google.com/ pを
ヴォルグファンガイア

あなたは本当に特性に関するドキュメントを読むべきです。ここで与えられた答えは、それらのドキュメントが話しているすべてに言及することなしには完全ではありません。特にセクション13に注意を払う必要があります-終了
smac89

回答:


4

トレイトは、(抽象)クラスの継承とインターフェースの実装という、両方の長所を兼ね備えています。トレイトにはメソッドのデフォルト実装を含めることができますが、タイプは一度に複数のトレイトを実装できます。これにより、ある種の多重継承が可能になりますが、良い方法では、致命的な死のダイヤを回避できます。

開始方法がわからない場合は、特性を使用してください。柔軟性が得られ、必要に応じて後でインターフェースまたはクラス継承に切り替えることができます。


3
インターフェースではデフォルトのメソッドを定義できるので、論理的な違いは何ですか?
Gilad Baruchian 2017

また、トレイトとインターフェースのデフォルトメソッドの違いにも困惑しています。私はgroovyの特性がJavaのデフォルトのメソッドよりも早く導入されたとしか想定できません
olyv

トレイトを使用すると、Javaのインターフェースで制限されるため、静的フィールドだけでなく通常のフィールドを定義できます
smac89

特性について混乱している場合は、ドキュメントをお読みください。それらは非常に有益です
smac89

1
@ smac89、ありがとう、それは本当に役に立ちました!
olyv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.