📜  Scala特性混合

📅  最后修改于: 2021-01-09 11:52:10             🧑  作者: Mango

Scala特性混合

在scala中,特征混合器意味着您可以使用类或抽象类扩展任意数量的特征。您只能扩展特征或特征与类的组合或特征与抽象类的组合。

必须保持mixin的顺序,否则编译器将引发错误。

您可以像这样在scala中使用mixins:

Scala特性示例:未维护Mixins订单

在此示例中,我们扩展了特征和抽象类。让我们看看会发生什么。

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订单

正确的mixins特性顺序是您要扩展的任何类或抽象类,首先对其进行扩展。所有特性将在此类或抽象类之后进行扩展。

Scala特性示例:Mixins订单保持不变

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 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