Groovy-특성

특성은 다음을 허용하는 언어의 구조적 구성입니다.

  • 행동의 구성.
  • 인터페이스의 런타임 구현.
  • 정적 유형 검사 / 컴파일과의 호환성

기본 구현과 상태를 모두 전달하는 인터페이스로 볼 수 있습니다. 특성은 특성 키워드를 사용하여 정의됩니다.

특성의 예는 다음과 같습니다.

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

그런 다음 implement 키워드를 사용하여 인터페이스와 유사한 방식으로 특성을 구현할 수 있습니다.

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 키워드를 사용하여 선언됩니다.

인터페이스를 구현하는 특성의 예는 다음과 같습니다. 다음 예에서 다음과 같은 핵심 사항을 확인할 수 있습니다.

  • Total 인터페이스는 DisplayTotal 메소드로 정의됩니다.

  • 트레이 트 마크는 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

행동의 구성

특성을 사용하여 제어 된 방식으로 다중 상속을 구현하여 다이아몬드 문제를 방지 할 수 있습니다. 다음 코드 예제에서는 두 가지 특성을 정의했습니다.MarksTotal. 우리 Student 클래스는 두 가지 특성을 모두 구현합니다. 학생 클래스는 두 가지 특성을 모두 확장하므로 두 가지 방법 모두에 액세스 할 수 있습니다.DisplayMarksDisplayTotal.

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예어. 다음 코드 예제에서는 Marks 트레이 트로 Total 트레이 트를 확장합니다.

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