trait Logger { def log(msg: String) } //子特质实现父特质里面的抽象方法 trait ConsoleLogger extends Logger { override def log(msg: String): Unit = println(msg) } //给日志加上一个时间戳 trait TimestampLogger extends ConsoleLogger { override def log(msg: String): Unit = super.log(s"${java.time.Instant.now()}$msg") } //如果日志过长,对日志进行截断显示 trait ShortterLogger extends ConsoleLogger { val maxLength = 15 override def log(msg: String): Unit = super.log( if (msg.length maxLength) msg else s"${msg.substring(0, maxLength - 3)}..." ) } class Account { protected var balance: Double = 0.0 } class SavingAccount extends Account with ConsoleLogger { def withdraw(ammount: Double): Unit = { if (ammount > balance) log("Insffient funds") else balance = balance - ammount } } //特质的应用 object TraitTest2 { //特质可以为类提供可以堆叠的改变 def main(args: Array[String]): Unit = { var acc1 = new SavingAccount with ConsoleLogger with TimestampLogger with ShortterLogger var acc2 = new SavingAccount with ConsoleLogger with ShortterLogger with TimestampLogger acc1.withdraw(100) acc2.withdraw(100) println("***************************") var acc3 = new SavingAccount with ConsoleLogger var acc4 = new SavingAccount with ConsoleLogger with TimestampLogger var acc5 = new SavingAccount with ConsoleLogger with ShortterLogger acc3.withdraw(100) acc4.withdraw(100) acc5.withdraw(100) } } |
08-17
216
01-03
1539
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交