一:
关键字:trait。
使用方式:通过extends和with方式的混入特质。
使用场景:当我们不想扩展其它的类的时候必须使用entends,当我们需要扩展其它类的时候,就必须使用with,可以混入多个特质,连续使用with即可。
Ordered特质:主要用于对象之间的比较,和Java的Comparable类似。
特质的作用:可以实现堆叠的改变,代码中的例子是对一个队列的元素进行加倍,加1,和过滤。
二:特质的例子
package 特质
/**
* @Author:Alex_lei
* @Description:
*/
object Trait {
def main(args: Array[String]): Unit = {
val lbld = new Lbld
lbld.f()
val d:Dog = lbld
d.f()
val tt = new Test_trait
tt.say
tt.f()
}
}
/**
* 使用extends混入特质
*/
class Lbld extends Dog{
override def f(): Unit = println("I am lbld")
}
/**
* trait叫特质,是Scala里面代码复用的基础单元,没有类参数这个用法。
* 通过混入的方式到类中
* 类可以混入多个特质
* 与Java的接口类似
*/
trait Dog{
def f(): Unit ={
println("I am dog")
}
}
class Animal{
val say = println("I am an animal")
}
/**
* 需要继承某个父类,然后使用with关键字混入特质
*/
class Test_trait extends Animal with Dog{
override val say: Unit = println("extends Animal")
override def f(): Unit = println("with Dog")
}
/**
* 使用extends和with分别是什么场景
* 该类如果不扩展其它的类,那么就必须用extends
* 如果想要扩展其它的类,就必须用with,可以混入多个特质,每个特质前面跟一个with关键字
*/
三:Ordered特质
package 特质
/**
* @Author:Alex_lei
* @Description: 当我们想对某几个对象进行排序时,并不需要定义四个比较运算符
* 直接使用Ordered特质即可,混入Ordered特质,重写compare方法。
*/
object Orderd {
def main(args: Array[String]): Unit = {
val p1 = new People("alex",22,"beijing")
val p2 = new People("Lily",21,"shanghai")
val bool = p1>p2
println(bool)
}
}
class People(val name:String,val age:Int,val add:String) extends Ordered[People]{
override def compare(that: People): Int = {
this.name.compareTo(that.name)
}
}