Scala中的接口,可以有抽象属性和方法,也可以有具体的属性和方法
1.1 基本语法
trait X{
//声明属性
var name:String = _
//声明方法
def eat():Unit={
}
//抽象属性
var age:Int
//抽象方法
def say():Unit
}
class P extends X with Y with Z{
}
1.2 特质叠加
从最右边声明继承的父类开始调用 此时关系(叠加)变成 D -> C -> B -> A
trait A{
def say(): Unit ={
print("-A")
}
}
trait B extends A{
override def say(): Unit = {
print("-B")
super.say()
}
}
trait C extends A{
override def say(): Unit = {
print("C")
super.say()
}
}
class D extends B with C{
override def say(): Unit = {
print("D-")
super.say()
}
}
object Test02_Demo {
def main(args: Array[String]): Unit = {
val d = new D
d.say()
}
}
1.3 特质自身类型
可以实现依赖注入功能,能够将该类的所有属性和函数都引入
class User(var name:String){
}
trait A1{
def say(user:User): Unit ={
println("A say =>"+user.name)
}
}
trait B1{
_ : A1 =>
// def say(user:User): Unit ={ .... }
def run(user:User): Unit ={
println("B run =>"+user.name)
say(user)
}
}
object Test03_Demo extends A1 with B1{
def main(args: Array[String]): Unit = {
run(new User("zs"))
}
}
1.4 特质和抽象类的选择
- 一般选择特质,能够多继承
- 如果需要有参数的构造方法就选择抽象类