码迷,mamicode.com
首页 > 其他好文 > 详细

Scala的特质

时间:2019-08-11 23:10:12      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:基础   复用   java   nim   name   sha   new t   单元   obj   

一:

  关键字: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)
  }
}

 

Scala的特质

标签:基础   复用   java   nim   name   sha   new t   单元   obj   

原文地址:https://www.cnblogs.com/lyr999736/p/11336941.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!