Szukaj…


Wprowadzenie

Cechy to konstrukcyjne obiekty konstrukcyjne w języku Groovy. Funkcje umożliwiają implementację interfejsów. Są kompatybilne ze statycznym sprawdzaniem i kompilacją typów. Cechy są zachowywane jak interfejsy z domyślnymi implementacjami i stanem. Deklaracja cechy polega na użyciu słowa kluczowego trait . ---------- Zakres metod cech obsługuje tylko metody publiczne i prywatne .

Podstawowe użycie

trait to zestaw metod i pól wielokrotnego użytku, które można dodać do jednej lub więcej klas.

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

Można ich używać jak zwykłych interfejsów, używając słowa kluczowego implements :

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

Można ich również użyć do implementacji wielokrotnego dziedziczenia (unikając problemu diamentów).

Psy mogą podrapać się po głowie, więc:

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!!"

Problem wielokrotnego dziedziczenia

Klasa może implementować wiele cech. W przypadku, gdy jedna cecha definiuje metodę o tej samej sygnaturze jak inna cecha, występuje problem wielokrotnego dziedziczenia. W takim przypadku używana jest metoda z ostatnio zadeklarowanej cechy :

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow