Scala教程
Scala面向对象
Scala高级

Scala Trait Mixins

Scala Trait Mixins

在 Scala 中,trait mixins 意味着您可以使用类或抽象类扩展任意数量的 trait。您只能扩展特征或特征与类的组合或特征与抽象类。
必须保持混合的顺序,否则编译器会抛出错误。
你可以像这样在Scala中使用mixin:

Scala Trait 示例: 未维护 Mixins 顺序

在此示例中,我们扩展了一个 trait 和一个抽象类。让我们看看会发生什么。
trait Print{
    def print()
}
abstract class PrintA4{
    def printA4()
}
class A6 extends Print with PrintA4{
    def print(){                // Trait print
        println("print sheet")
    }
    def printA4(){              // abstract class printA4
        println("Print A4 Sheet")
    }
}
object MainObject{
    def main(args:Array[String]){
        var a = new A6()
        a.print()
        a.printA4()
    }
}
输出:
error: class PrintA4 needs to be a trait to be mixed in
class A6 extends Print with PrintA4{
                            ^
one error found
上面的程序抛出一个编译时错误,因为我们没有维护mixins顺序。

Scala Mixins Order

trait 正确的 mixins 顺序是任何你想要扩展的类或抽象类,首先扩展它。

Scala Trait Example: Mixins Order维护

trait Print{
    def print()
}
abstract class PrintA4{
    def printA4()
}
class A6 extends PrintA4 with Print{          // First one is abstract class second one is trait
    def print(){                                        // Trait print
        println("print sheet")
    }
    def printA4(){                                      // abstract class printA4
        println("Print A4 Sheet")
    }
}
object MainObject{
    def main(args:Array[String]){
        var a = new A6()
        a.print()
        a.printA4()
    }
}
输出:
print sheet
Print A4 Sheet

Scala Trait 的另一个例子

在这里,我们使用了另一种方法在我们的程序中扩展 trait。在这种方法中,我们在对象创建期间扩展 trait。让我们看一个例子。
trait Print{
    def print()
}
abstract class PrintA4{
    def printA4()
}
class A6 extends PrintA4 {
    def print(){                             // Trait print
        println("print sheet")
    }
    def printA4(){                              // abstract class printA4
        println("Print A4 Sheet")
    }
}
object MainObject{
    def main(args:Array[String]){
        var a = new A6() with Print               // You can also extend trait during object creation
        a.print()
        a.printA4()
    }
}
输出:
print sheet
Print A4 Sheet
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4