- Groovy 教程
- Groovy - 主页
- Groovy - 概述
- Groovy - 环境
- Groovy - 基本语法
- Groovy - 数据类型
- Groovy - 变量
- Groovy - 运算符
- Groovy - 循环
- Groovy - 决策
- Groovy - 方法
- Groovy - 文件 I/O
- Groovy - 可选
- Groovy - 数字
- Groovy - 字符串
- Groovy - 范围
- Groovy - 列表
- Groovy - 地图
- Groovy - 日期和时间
- Groovy - 正则表达式
- Groovy - 异常处理
- Groovy - 面向对象
- Groovy - 泛型
- Groovy - 特征
- Groovy - 闭包
- Groovy - 注释
- Groovy-XML
- Groovy-JMX
- Groovy - JSON
- Groovy-DSLS
- Groovy - 数据库
- Groovy - 构建者
- Groovy - 命令行
- Groovy - 单元测试
- Groovy - 模板引擎
- Groovy - 元对象编程
- Groovy 有用的资源
- Groovy - 快速指南
- Groovy - 有用的资源
- Groovy - 讨论
Groovy - 特征
特征是语言的结构构造,它允许 -
- Behave的构成。
- 接口的运行时实现。
- 与静态类型检查/编译的兼容性
它们可以被视为携带默认实现和状态的接口。特征是使用 Trait 关键字定义的。
下面给出了一个特征的例子 -
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 方法定义的。
特征 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 是一个属性。
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
Behave的构成
Traits 可用于以受控方式实现多重继承,避免菱形问题。在下面的代码示例中,我们定义了两个特征 - Marks和Total。我们的 Student 类实现了这两个特征。由于学生类扩展了这两个特征,因此它能够访问这两种方法—— 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
扩展特征
Traits 可以扩展另一个 Trait,在这种情况下您必须使用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