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

scala特质

时间:2016-11-30 16:59:22      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:xtend   混入   多个   boolean   test   with   dev   java实现   instance   

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特质

标签:xtend   混入   多个   boolean   test   with   dev   java实现   instance   

原文地址:http://www.cnblogs.com/huzi007/p/6118126.html

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