Scala trait特性

 

1.概念理解

  • Scala Trait(特征)相当于Java的接口,实际上他比接口还要功能强大。
  • 与接口不同的是,它还可以定义属性和方法的实现。
  • 一般情况下Scala的类可以继承多个Trait,从结果来看就是实现了多重继承。
  • Trait(特征)定义的方式与类类似,但他使用的关键字trait。

2.举例

trait中带属性带方法实现

  • 注意:继承的多个trait中如果有同名的方法和属性,必须要在类中使用"override"重新定义。
  • tait中不可以传参数
object Test1 {
  def main(args: Array[String]): Unit = {
    val person = new Person()
    person.read("zhangsan")
    person.listen("lisi")
    println(person.listenType)
    println(person.readType)
    println(person.gender)
  }
}

trait Read {
  val readType = "Read"
  val gender = "m"

  def read(name: String) {
    println(name + " is reading")
  }
}

trait Listen {
  val listenType = "Listen"
  val gender = "m"

  def listen(name: String): Unit = {
    println(name + " is listening")
  }
}

class Person() extends Read with Listen {
  override val gender: String = "f"
}

trait中带方法不实现

object Test1 {
  def main(args: Array[String]): Unit = {
    val p1 = new Point(1, 2)
    val p2 = new Point(1, 3)
    println(p1.isEqule(p2))
    println(p1.isNotEqule(p2))

  }
}

trait Equle {
  def isEqule(x: Any): Boolean

  def isNotEqule(x: Any) = {
    !isEqule(x)
  }
}

class Point(x: Int, y: Int) extends Equle {
  val xx = x
  val yy = y

  def isEqule(p: Any) = {
    p.isInstanceOf[Point] && p.asInstanceOf[Point].xx == xx
  }

}
发布了17 篇原创文章 · 获赞 4 · 访问量 477

猜你喜欢

转载自blog.csdn.net/dhyaishuai/article/details/95309213
今日推荐