Groovy - Traits
-
简述
特征是语言的结构构造,它允许 -- 行为(方法)的组成。
- 接口的运行时实现。
- 与静态类型检查/编译的兼容性
它们可以被看作是携带默认实现和状态的接口。使用 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
-
行为的构成
特征可用于以受控方式实现多重继承,避免菱形问题。在下面的代码示例中,我们定义了两个特征 - 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
-
扩展特征
特征可以扩展另一个特征,在这种情况下,您必须使用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