Scala的Trait

Trait就像一个拥有部分实现的接口,它提供了一个介于单一继承和多重继承的中间地带,因为我们可以在其他类里面混入(mix in)它们。这样就可以用一组特性对类进行增强。

示例:

abstract class Writer {

  def writeMessage(message: String)
}

trait UpperCaseWriter extends Writer {
  abstract override def writeMessage(message: String): Unit = {
    super.writeMessage(message.toUpperCase())
  }
}

trait ProfanityFilteredWriter extends Writer {
  abstract override def writeMessage(message: String): Unit = {
    super.writeMessage(message.replace("stupid", "s-----"))
  }
}

class StringWriterDelegate extends Writer {
  
  val writer = new java.io.StringWriter
  
  override def writeMessage(message: String) = writer.write(message)

  override def toString() = writer.toString()
}


调用:

val myWriterProfanityFirst = 
          new StringWriterDelegate 
          with UpperCaseWriter
          with ProfanityFilteredWriter
          
    val myWriterProfanityLast = 
          new StringWriterDelegate 
          with ProfanityFilteredWriter
          with UpperCaseWriter
      
    myWriterProfanityFirst.writeMessage("There is no sin except stupidity") 
    myWriterProfanityLast.writeMessage("There is no sin except stupidity") 
          
    println(myWriterProfanityFirst)
    println(myWriterProfanityLast)

结果:

THERE IS NO SIN EXCEPT S-----ITY
THERE IS NO SIN EXCEPT STUPIDITY






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值