特质中没有实现的方法就是抽象方法。类通过extends继承特质,通过with可以混入多个特质。
trait Logger {
def log(msg: String)
}
class ConsoleLogger extends Logger with Cloneable with Serializable {
def log(msg: String) {
println(msg)
}
}
尖叫提示:Logger with Cloneable with Serializable是一个整体,继承(extends)这个整体,所有的java接口都可以当做Scala特质使用。
ConsoleLogger类混入了三个特质,虽然有extends 关键字,但是特质用混入,就像接口用实现,而不是接口继承,只能说接口能够继承接口,但是类是不能继承接口的,类只能实现接口,那么特质是可以继承特质的,类和特质的结合叫做混入,特质混入这个类,那么这个类就持有了这些特质,然后复写这些方法就可以了
class Dog extends Animal with A with B with C{
}
//可以看做
Dog extends (Animal with A with B with C)
//可以写作
type mix = (Animal with A with B with C)
class Dog extends mix{
}