Groovy - черты характера

Черты - это структурная конструкция языка, которая позволяет:

  • Состав поведения.
  • Реализация интерфейсов во время выполнения.
  • Совместимость с проверкой / компиляцией статического типа

Их можно рассматривать как интерфейсы, несущие как реализации по умолчанию, так и состояние. Признак определяется с помощью ключевого слова trait.

Пример черты приведен ниже -

trait Marks {
   void DisplayMarks() {
      println("Display Marks");
   } 
}

Затем можно использовать ключевое слово реализации, чтобы реализовать черту так же, как интерфейсы.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.Marks1 = 10; 
      println(st.DisplayMarks());
   } 
} 

trait Marks { 
   void DisplayMarks() {
      println("Display Marks");
   } 
} 

class Student implements Marks { 
   int StudentID
   int Marks1;
}

Реализация интерфейсов

Черты могут реализовывать интерфейсы, и в этом случае интерфейсы объявляются с использованием ключевого слова Implements.

Ниже приведен пример трейта, реализующего интерфейс. В следующем примере можно отметить следующие ключевые моменты.

  • Итого интерфейса определяется методом DisplayTotal.

  • Признак Marks реализует интерфейс Total и, следовательно, должен предоставить реализацию для метода DisplayTotal.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      st.Marks1 = 10;
		
      println(st.DisplayMarks());
      println(st.DisplayTotal());
   } 
} 

interface Total {
   void DisplayTotal() 
} 

trait Marks implements Total {
   void DisplayMarks() {
      println("Display Marks");
   }
	
   void DisplayTotal() {
      println("Display Total"); 
   } 
} 

class Student implements Marks { 
   int StudentID
   int Marks1;  
}

Результатом вышеуказанной программы будет -

Display Marks 
Display Total

Свойства

Признак может определять свойства. Ниже приводится пример признака со свойством.

В следующем примере Marks1 целочисленного типа является свойством.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
		
      println(st.DisplayMarks());
      println(st.DisplayTotal());
   } 
	
   interface Total {
      void DisplayTotal() 
   } 
	
   trait Marks implements Total {
      int Marks1;
		
      void DisplayMarks() {
         this.Marks1 = 10;
         println(this.Marks1);
      }
		
      void DisplayTotal() {
         println("Display Total");
      } 
   } 
	
   class Student implements Marks {
      int StudentID 
   }
}

Результатом вышеуказанной программы будет -

10 
Display Total

Состав поведения

Черты можно использовать для реализации множественного наследования контролируемым образом, избегая проблемы с ромбами. В следующем примере кода мы определили две черты:Marks и Total. В нашем классе Student реализованы обе черты. Поскольку класс ученика расширяет обе черты, он может получить доступ к обоим методам -DisplayMarks и DisplayTotal.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
		
      println(st.DisplayMarks());
      println(st.DisplayTotal()); 
   } 
} 

trait Marks {
   void DisplayMarks() {
      println("Marks1");
   } 
} 

trait Total {
   void DisplayTotal() { 
      println("Total");
   } 
}  

class Student implements Marks,Total {
   int StudentID 
}

Результатом вышеуказанной программы будет -

Total 
Marks1

Расширение черт

Черты могут расширять другую черту, и в этом случае вы должны использовать extendsключевое слово. В следующем примере кода мы расширяем типаж Total с помощью трейта Marks.

class Example {
   static void main(String[] args) {
      Student st = new Student();
      st.StudentID = 1;
      println(st.DisplayMarks());
   } 
} 

trait Marks {
   void DisplayMarks() {
      println("Marks1");
   } 
} 

trait Total extends Marks {
   void DisplayMarks() {
      println("Total");
   } 
}  

class Student implements Total {
   int StudentID 
}

Результатом вышеуказанной программы будет -

Total