Groovy 特征

2020-12-15 09:17 更新

特征是語言的結(jié)構(gòu)構(gòu)造,允許 -

  • 行為的組成。
  • 接口的運(yùn)行時(shí)實(shí)現(xiàn)。
  • 與靜態(tài)類型檢查/編譯的兼容性

它們可以被看作是承載默認(rèn)實(shí)現(xiàn)和狀態(tài)的接口。使用trait關(guān)鍵字定義 trait。

下面給出了一個(gè)特征的例子:

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

然后可以使用 implement 關(guān)鍵字以類似于接口的方式實(shí)現(xiàn) trait。

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

實(shí)現(xiàn)接口

Traits 可以實(shí)現(xiàn)接口,在這種情況下,使用 interface 關(guān)鍵字聲明接口。

下面給出了實(shí)現(xiàn)接口的特征的示例。在以下示例中,可以注意以下要點(diǎn)。

  • 接口 Total 使用方法 DisplayTotal 定義。

  • 特征 Marks 實(shí)現(xiàn)了 Total 接口,因此需要為 DisplayTotal 方法提供一個(gè)實(shí)現(xiàn)。

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

屬性

特征可以定義屬性。下面給出了具有屬性的trait的示例。

在以下示例中,integer 類型的 Marks1 是一個(gè)屬性。

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

行為的構(gòu)成

特征可以用于以受控的方式實(shí)現(xiàn)多重繼承,避免鉆石問題。在下面的代碼示例中,我們定義了兩個(gè)特征 - Marks 和 Total。我們的 Student 類實(shí)現(xiàn)了兩個(gè)特征。由于學(xué)生類擴(kuò)展了這兩個(gè)特征,它能夠訪問這兩種方法 - 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 
}   

上述程序的輸出將是 -

Marks1
Total 

擴(kuò)展特征

特征可能擴(kuò)展另一個(gè)特征,在這種情況下,必須使用extends關(guān)鍵字。在下面的代碼示例中,我們使用 Marks trait 擴(kuò)展了 Total 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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)