目录
- 说明
- 案例
- 动态混入
说明
Scala 语言中,采用特质 trait(特征)来代替接口的概念,也就是说,多个类具有相同的特质(特征)时,就可以将这个特质(特征)独立出来,采用关键字 trait 声明。
Scala 中的 trait 中即可以有抽象属性和方法,也可以有具体的属性和方法,一个类可以混入(mixin)多个特质。这种感觉类似于 Java 中的抽象类。
Scala 引入 trait 特征,第一可以替代 Java 的接口,第二个也是对单继承机制的一种补充。
案例
object Trait {
def main(args: Array[String]): Unit = {
val student = new Student5
student.study()
student.increase()
student.play()
student.increase()
student.dating()
student.increase()
}
}
// 定义一个父类
class Person5(val name: String = "person", var age: Int = 18) {
def sayHi(): Unit = {
println(s"hello from: $name")
}
}
trait Young {
//声名抽象和非抽象属性
var age: Int
val name: String = "Young"
//声名抽象和非抽象方法
def dating(): Unit
def play(): Unit = {
println(s"young people $name is playing")
}
}
trait Knowledge {
var amount: Int = 0
def increase(): Unit
}
class Student5 extends Person5 with Young with Knowledge {
//重写冲突的属性
override val name: String = "student"
//实现抽象方法
def dating(): Unit = println(s"student $name is dating")
def study(): Unit = println(s"student $name is studying")
def increase(): Unit = {
amount += 1
println(s"student $name Knowledge increased: $amount")
}
//重写父类方法
override def sayHi(): Unit = {
println(s"hi from: $name")
}
}
注意:不像java的接口中只能存在抽象的属性和方法,trait中可以有非抽象的属性和方法
动态混入
创建对象时再混入特质