前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Groovy-9.特征

Groovy-9.特征

作者头像
悠扬前奏
发布2019-06-02 12:57:25
2580
发布2019-06-02 12:57:25
举报

trait:

  • 承载默认实现和状态的接口
  • 用trait关键字定义特征

trait允许:

  • 行为的组成
  • 接口的运行时实现
  • 与静态类型检查/编译的兼容性

一个简单的例子:

代码语言:javascript
复制
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;
}

实现接口

Trait可以实现接口:

  • 用implements关键字声明接口
  • 特征实现接口需要为接口方法提供实现
代码语言:javascript
复制
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;  
} 

特征属性

特征可以定义属性。

代码语言:javascript
复制
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 
   }
} 

多重继承

特征可以用于以受控的方式实现多重继承。 以下例子Student类实现了两个特征。由于Student类扩展了这两个特征,它能够访问这两种方法,DisplayMarks和DisplayTotal:

代码语言:javascript
复制
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 
}

扩展特征

通过extends特征可以扩展特征:

代码语言:javascript
复制
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 
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现接口
  • 特征属性
  • 多重继承
  • 扩展特征
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档