trait 继承的Demo

本文介绍了一个使用Scala实现的日志记录系统,该系统通过特质实现了打印和加密日志的功能。文章展示了如何定义特质并让类同时具备打印明文日志和加密后日志的能力。
trait Logger {
  def log(msg: String) {}
}

trait PrinterLogger extends Logger {
  val v = 24

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

trait CryptoLogger extends Logger {
  val key = 3

  override def log(msg: String): Unit = {
    val ceasarMsg = for (c <- msg) yield c match {
      case a if a >= 'A' && a <= 'Z' => applyKey(a, 'A', 26)
      case a if a >= '0' && a <= '9' => applyKey(a, '0', 10)
      case _ => c
    }
    super.log(ceasarMsg)
  }

  private def applyKey(c: Char, r: Char, l: Int): Char = {
    ((c - r + key) % l + r).toChar
  }
}

class Person(private val _name: String) extends {
  override val key = 9
  override val v = 36
} with PrinterLogger with CryptoLogger {
  def name = {
    log(_name)
    _name
  }
}

val JohnSmith = new Person("John Smith")
println(JohnSmith.key)
println(JohnSmith.v)
JohnSmith.name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值