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