サーチ…


前書き

特性は、Groovy言語の構造的な構成オブジェクトです。特性により、インタフェースの実装が可能になります。静的型チェックとコンパイルと互換性があります。特性は、デフォルトの実装と状態を持つインタフェースとして動作します。形質の宣言は、 traitキーワードを使用することです。 ---------- Traitsメソッドのスコープは、 パブリックメソッドとプライベートメソッドのみをサポートします。

基本的な使用法

traitとは、再利用可能なメソッドとフィールドのセットで、1つ以上のクラスに追加できます。

trait BarkingAbility {
    String bark(){ "I'm barking!!" }
}

implementsキーワードを使用して、通常のインターフェースと同様に使用できます。

class Dog implements BarkingAbility {}
def d = new Dog()
assert d.bark() = "I'm barking!!"

また、複数の継承を実装するためにも使用できます(ダイヤモンドの問題を避ける)。

犬は頭を傷つけることができるので、

trait ScratchingAbility {
    String scratch() { "I'm scratching my head!!" }
}

class Dog implements BarkingAbility, ScratchingAbility {}
def d = new Dog()
assert d.bark() = "I'm barking!!"
assert d.scratch() = "I'm scratching my head!!"

多重継承問題

クラスは複数の特性を実装できます。 1つの形質が別の形質のように同じシグネチャでメソッドを定義する場合、多重継承の問題があります。その場合、 最後に宣言された特性のメソッドが使用されます。

trait Foo {
  def hello() {'Foo'}
}
trait Bar {
  def hello() {'Bar'}
}

class FooBar implements Foo, Bar {}

assert new FooBar().hello() == 'Bar'


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow