首页 > 代码库 > scala特质

scala特质

package com.ming.test/** * scala 特质,类似与java接口,但是比java接口强大,可以有实现方法,定义字段之类的 *//** * 定义一个日志的特质 */trait LoggerTrait {  def logger(str:String):String  def loggerDev(str:String):String={"hello"}}/** * 定义一个是否相等的特质 */trait EqualTrait {  def isEqual(x: Any): Boolean  def isNotEqual(x: Any): Boolean = !isEqual(x)}/** * 定义一个类,继承上面两个特质 */class LoggerClass(xc: Int, yc: Int) extends LoggerTrait with EqualTrait{  var x: Int = xc  var y: Int = yc  def isEqual(obj: Any) =    obj.isInstanceOf[LoggerClass] &&    obj.asInstanceOf[LoggerClass].x == x      def logger(str:String):String={str}}/** * 定义一个空类,打算在使用的时候去实现特质 */class KongClass{  }object TraitTest{  def main(args: Array[String]): Unit = {        var a=new LoggerClass(5,6);    var b=new LoggerClass(5,6);    var c=new LoggerClass(5,7);    println(a.isEqual(b));    println(a.isEqual(c));    println(a.isNotEqual(c));    println(a.loggerDev(""));        //空类使用继承不同的特质,类似与java实现接口哦    var kong1=new KongClass with LoggerTrait{       def logger(str:String):String={str}    }    val str=kong1.logger("kong1")    println(str)      }}
特质构造顺序特质也可以有构造器,由字段的初始化和其他特征体中的语句构成。这些语句在任何混入该特质的对象在构造是都会被执行。构造器的执行顺序:调用超类的构造器;特质构造器在超类构造器之后、类构造器之前执行;特质由左到右被构造;每个特质当中,父特质先被构造;如果多个特质共有一个父特质,父特质不会被重复构造所有特质被构造完毕,子类被构造。

 

scala特质