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 Dd.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 特质和抽象类的选择
- 一般选择特质,能够多继承
 - 如果需要有参数的构造方法就选择抽象类
 
