scala 特质

package com.jason.qianfeng

trait Iterator[A] {
  val name = "Iterator"

  def hasNext: Boolean

  def next: A
}

trait Log {
  def log(msg: String): Unit = {
    println(msg)
  }
}

class IntIterator(to: Int) extends Iterator[Int] with Log {
  var current = 0

  override def hasNext = current < to

  override def next = {
    if (current < to) {
      log("has next")
      val r = current
      current += 1
      r
    } else {
      0
    }
  }

}

object IteratorTest{
  def main(args: Array[String]): Unit = {
    val it = new IntIterator(10)
    println(it.next)
    println(it.next)
    println(it.next)
  }
}

scala 中的特质类似java中的接口,但是trait 更灵活,在trait 中

1.可以定义属性(抽象或是非抽象的)

2.可以定义抽象或具体方法

特质几乎和抽象类是一样的(不能定义构造函数)

3.一个类可以混入多个特质,第一个特质使用extends 混入,从第二个特质开始使用with 混入

4.关于抽象类和特质的使用,建议使用特质,因为一个类可以混入多个特质,但是只能继承一个抽象类

猜你喜欢

转载自www.cnblogs.com/jason-dong/p/9503319.html