Scala Trait
Scala Trait
Trait 就像一个带有部分实现的接口。在 scala 中,trait 是抽象和非抽象方法的集合。您可以创建可以包含所有抽象方法或一些抽象方法和一些非抽象方法的特征。
在特征中使用 val 或 var 关键字声明的变量在实现的类中内部实现特质。任何使用 val 或 var 声明但未初始化的变量都被认为是抽象的。
特征被编译成 Java 接口,并带有相应的实现类,这些实现类包含在特征中实现的任何方法。
Scala 特性示例
trait Printable{
def print()
}
class A4 extends Printable{
def print(){
println("Hello")
}
}
object MainObject{
def main(args:Array[String]){
var a = new A4()
a.print()
}
}
输出:
如果一个类扩展了一个 trait 但没有实现该 trait 中声明的成员,则必须将其声明为抽象类。让我们看一个例子。
Scala Trait Example
trait Printable{
def print()
}
abstract class A4 extends Printable{ // Must declared as abstract class
def printA4(){
println("Hello, this is A4 Sheet")
}
}
Scala Trait 示例: 在一个类中实现多个 Traits
如果一个类实现了多个 trait,它将继承第一个 trait,类,抽象类。 with 关键字用于扩展其余的 trait。
您可以通过使用 trait 来实现多重继承。
trait Printable{
def print()
}
trait Showable{
def show()
}
class A6 extends Printable with Showable{
def print(){
println("this is printable")
}
def show(){
println("this is showable");
}
}
object MainObject{
def main(args:Array[String]){
var a = new A6()
a.print()
a.show()
}
}
输出:
this is printable
this is showable
Scala Trait 具有抽象和非抽象方法
您也可以像在抽象类中一样在 trait 中定义方法。 IE。您也可以将 trait 视为抽象类。在 scala 中,trait 几乎与抽象类相同,只是它不能有构造函数。您不能扩展多个抽象类,但可以扩展多个特征。
Scala Trait 示例
trait Printable{
def print() // abstract method
def show(){ // Non-abstract method
println("this is show method")
}
}
class A6 extends Printable{
def print(){
println("this is print method")
}
}
object MainObject{
def main(args:Array[String]){
var a = new A6()
a.print()
a.show()
}
}
输出:
this is print method
this is show method