特征是语言的结构构造,允许 -
- 行为的组成。
- 接口的运行时实现。
- 与静态类型检查/编译的兼容性
它们可以被看作是承载默认实现和状态的接口。使用trait关键字定义trait。
下面给出了一个特征的例子:
- trait Marks {
- void DisplayMarks() {
- println("Display Marks");
- }
- }
然后可以使用implement关键字以类似于接口的方式实现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;
- }
实现接口
Traits可以实现接口,在这种情况下,使用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
属性
特征可以定义属性。下面给出了具有属性的trait的示例。
在以下示例中,integer类型的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 trait扩展了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
转载本站内容时,请务必注明来自W3xue,违者必究。