scala中的接口
没有接口,采用trait(特征)来代替接口的概念,类似于java中的 interface+abstract class, scala中称为类 混入/继承 了特质
特质 trait
– 可以类比java中的接口,但是又和接口非常不一样
定义特质
trait xxx{
def m1()
def m2(){....}
}
和java中的接口不同 scala中的特质可以包含具有方法体的方法(java8也可以在接口中定义具有方法体的方法)
和抽象类不同的地方在于 scala的类只能单继承 但是可以多混入 利用这种方式可以实现类似c语言中多继承的特性
特质的两种使用方式
混入特质 with,被实现的方式不具有传递性
继承特质 extends,使方法具有了传递性
如果类没有明确继承父类,即extends关键字没有被占用 就可以使用extends 但是如已经使用了extends继承了父类 再向混入特质就要用 with关键字了 一个类的声明中只能有一个 extends 但是可以有多个with
继承和特质的区别不在于技术上而在于逻辑上
继承的目的——为了符合继承结构树,表明它是啥;
实现特质的目的——为了混入某些特性
trait Run{
def run()
def run(length:Long){
}
}
trait Eat{
def eat()
}
trait Sleep{
def sleep()
}
class Demo10 extends Run with Eat with Sleep {
def run(): Unit = {
}
def eat(): Unit = {
}
def sleep(): Unit = {
}
}