/**
* 特质(interface)就是对应的java中的接口
* 在Scala中特质中可以定义有实现的方法,也可以定义没有实现的方法
*/
trait ScalaTrait {
/**
* 可以只定义接口,也可以实现方法
*/
def hello(name: String)
def small(name: String) = {
println(s"老赵对 $name 妩媚一笑")
}
}
object ScalaTraitImpl extends ScalaTrait with Fly{
// override val name: String = "bird"
/**
* 如果特质中hello方法没有实现的话,子类在实现的时候可以不加override关键字也可以加
*/
override def hello(name: String): Unit = {
println(s"hello $name")
}
/**
* 如果特质中某个方法有具体的实现,在子类继承重写的时候,必须使用override关键字
*/
override def small(name: String): Unit = {
println(s"$name")
}
def main(args: Array[String]): Unit = {
ScalaTraitImpl.hello("hanmeimei")
ScalaTraitImpl.small("wang")
ScalaTraitImpl.fly("wang")
}
}
使用with 可以混入多个特指(实现多个接口)
class Student {
}
object Person {
def main(args: Array[String]): Unit = {
/**
* 在scala中可以动态的混入N个特质
*/
val student = new Student with Fly with ScalaTrait
//student.hello("wang")
student.fly("xing")
student.small("wang")
}
}