Groovy - Eigenschaften

Merkmale sind ein strukturelles Konstrukt der Sprache, das Folgendes ermöglicht:

  • Zusammensetzung des Verhaltens.
  • Laufzeitimplementierung von Schnittstellen.
  • Kompatibilität mit statischer Typprüfung / Kompilierung

Sie können als Schnittstellen angesehen werden, die sowohl Standardimplementierungen als auch den Status enthalten. Ein Merkmal wird mit dem Schlüsselwort trait definiert.

Ein Beispiel für ein Merkmal ist unten angegeben -

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

Man kann dann das Schlüsselwort implement verwenden, um das Merkmal auf ähnliche Weise wie Schnittstellen zu implementieren.

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

Schnittstellen implementieren

Merkmale können Schnittstellen implementieren. In diesem Fall werden die Schnittstellen mit dem Schlüsselwort implements deklariert.

Ein Beispiel für ein Merkmal, das eine Schnittstelle implementiert, ist unten angegeben. Im folgenden Beispiel können die folgenden Schlüsselpunkte beachtet werden.

  • Eine Schnittstelle Total wird mit der Methode DisplayTotal definiert.

  • Das Merkmal Marks implementiert die Total-Schnittstelle und muss daher eine Implementierung für die DisplayTotal-Methode bereitstellen.

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

Die Ausgabe des obigen Programms wäre -

Display Marks 
Display Total

Eigenschaften

Ein Merkmal kann Eigenschaften definieren. Ein Beispiel für ein Merkmal mit einer Eigenschaft ist unten angegeben.

Im folgenden Beispiel ist Marks1 vom Typ Integer eine Eigenschaft.

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

Die Ausgabe des obigen Programms wäre -

10 
Display Total

Zusammensetzung des Verhaltens

Merkmale können verwendet werden, um Mehrfachvererbung auf kontrollierte Weise zu implementieren und das Diamantproblem zu vermeiden. Im folgenden Codebeispiel haben wir zwei Merkmale definiert:Marks und Total. Unsere Schülerklasse implementiert beide Eigenschaften. Da die Schülerklasse beide Merkmale erweitert, kann sie auf beide Methoden zugreifen -DisplayMarks und 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 
}

Die Ausgabe des obigen Programms wäre -

Total 
Marks1

Eigenschaften erweitern

Merkmale können ein anderes Merkmal erweitern. In diesem Fall müssen Sie das verwenden extendsStichwort. Im folgenden Codebeispiel erweitern wir das Merkmal "Gesamt" um das Merkmal "Marken".

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 
}

Die Ausgabe des obigen Programms wäre -

Total