Поиск…


Вступление

Черты являются объектами структурного строительства на языке Groovy. Черты позволяют реализовать интерфейсы. Они совместимы со статическим типом проверки и компиляции. Черты ведут себя как интерфейсы с реализацией по умолчанию и состоянием. Декларация признака заключается в использовании ключевого слова trait . ---------- Область методов методов поддерживает только публичные и частные методы.

Основное использование

trait является многоразовым набором методов и полей , которые могут быть добавлены к одному или нескольким классам.

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

Проблема множественного наследования

Класс может реализовывать несколько признаков. В случае, если один признак определяет метод с той же сигнатурой, что и другой признак, существует проблема множественного наследования. В этом случае используется метод из последнего объявленного признака :

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