Groovy - cechy

Cechy są konstrukcją strukturalną języka, która pozwala -

  • Kompozycja zachowań.
  • Implementacja interfejsów w czasie rzeczywistym.
  • Zgodność ze statycznym sprawdzaniem / kompilacją typów

Można je postrzegać jako interfejsy przenoszące zarówno domyślne implementacje, jak i stan. Cecha jest definiowana za pomocą słowa kluczowego cecha.

Przykład cechy podano poniżej -

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

Następnie można użyć słowa kluczowego implement, aby zaimplementować cechę w podobny sposób, jak w przypadku interfejsów.

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;
}

Implementowanie interfejsów

Cechy mogą implementować interfejsy, w którym to przypadku interfejsy są deklarowane przy użyciu słowa kluczowego implements.

Poniżej podano przykład cechy implementującej interfejs. W poniższym przykładzie można zauważyć następujące kluczowe punkty.

  • Interfejs Total jest definiowany za pomocą metody DisplayTotal.

  • Cecha Marks implementuje interfejs Total i dlatego musi zapewnić implementację metody 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;  
}

Wynik powyższego programu byłby -

Display Marks 
Display Total

Nieruchomości

Cecha może określać właściwości. Poniżej podano przykład cechy posiadającej właściwość.

W poniższym przykładzie właściwość Marks1 typu integer jest.

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 
   }
}

Wynik powyższego programu byłby -

10 
Display Total

Skład zachowań

Cechy można wykorzystać do implementacji wielokrotnego dziedziczenia w kontrolowany sposób, unikając problemu diamentów. W poniższym przykładzie kodu zdefiniowaliśmy dwie cechy -Marks i Total. Nasza klasa Student realizuje obie cechy. Ponieważ klasa ucznia rozszerza obie cechy, jest w stanie uzyskać dostęp do obu metod -DisplayMarks i 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 
}

Wynik powyższego programu byłby -

Total 
Marks1

Rozszerzające cechy

Cechy mogą rozszerzyć inną cechę, w takim przypadku musisz użyć extendssłowo kluczowe. W poniższym przykładzie kodu rozszerzamy cechę Total o cechę 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 
}

Wynik powyższego programu byłby -

Total