Groovy - ลักษณะ

ลักษณะเป็นโครงสร้างโครงสร้างของภาษาที่อนุญาต -

  • องค์ประกอบของพฤติกรรม
  • การใช้งานอินเตอร์เฟสรันไทม์
  • ความเข้ากันได้กับการตรวจสอบ / คอมไพล์ประเภทคงที่

สามารถมองเห็นได้ว่าเป็นอินเทอร์เฟซที่มีทั้งการใช้งานเริ่มต้นและสถานะ ลักษณะถูกกำหนดโดยใช้คำสำคัญลักษณะ

ตัวอย่างลักษณะได้รับด้านล่าง -

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

ตัวอย่างลักษณะการใช้งานอินเทอร์เฟซได้รับด้านล่าง ในตัวอย่างต่อไปนี้สามารถสังเกตประเด็นสำคัญต่อไปนี้

  • อินเทอร์เฟซ Total ถูกกำหนดด้วยวิธี DisplayTotal

  • trait 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 of type integer เป็นคุณสมบัติ

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. ชั้นเรียนนักเรียนของเราใช้ทั้งสองลักษณะ เนื่องจากชั้นเรียนของนักเรียนขยายทั้งสองลักษณะจึงสามารถเข้าถึงทั้งสองวิธี -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 trait ด้วย Marks trait

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