Scala基础—Trait使用示例

来源:互联网 发布:mac玩魔兽世界非常热 编辑:程序博客网 时间:2024/05/21 19:31
package com.spark.scala.basics/**  * 1.  */trait Logger {  def log(message: String): Unit = {    println("Logger: " + message)  }}trait RichLogger extends Logger{  override def log(message: String): Unit = {    println("RichLogger: " + message)  }}class Loggin(val name : String) extends Logger {  def loggin: Unit = {    println("Hi, " + name )  }  log(name)}trait Information {  def getInformation: String  def chechIn: Boolean = {    getInformation.equals("Scala")  }}class Passenger(val name: String) extends Information {  override def getInformation = name}object HelloTrait {  def main(args:Array[String]): Unit ={    val person = new Loggin("World") with RichLogger //接口的第三方实现    person.loggin  }}
package com.expgiga.ScalaTest/**  * Scala Trait相当于Java的接口,实际上它比接口功能还要强大  * 与接口不同的是,它还可以定义属性和方法的实现  * 一般情况下Scala的类只能够继承单一父类,但是如果是Trait的话就可以继承多个,从结果来看就是实现了多重继承  * Trait定义的方式与类类似,但它使用的关键字是trait  */object TraitTest {  def main(args:Array[String]): Unit = {    val p1 = new Point(2, 3)    val p2 = new Point(2, 4)    val p3 = new Point(3, 3)    println(p1.isNotEuqal(p2))    println(p1.isNotEuqal(p3))    println(p1.isNotEuqal(2))  }}trait Equal {  def isEuqal(x: Any): Boolean  def isNotEuqal(x: Any): Boolean = !isEuqal(x)}class Point(xc: Int, yc: Int) extends Equal {  var x: Int = xc  var y: Int = yc  def isEuqal(obj: Any) =    obj.isInstanceOf[Point] &&  obj.asInstanceOf[Point].x == x}