/*
* trait类似java的interface,但比interface强大
* 和java不同,trait可以有具体的函数实现
* 如果函数有具体实现,那么实现类重新trait方法时必须写override关键字(按良好习惯,推荐写override)
*/
trait Cloneable extends java.lang.Cloneable
trait Logger {
// def log(msg: String)
def log(msg: String) {}
}
/*
* 继承trait使用extends
* 如果使用多个trait,extends后使用with
*/
class ConcreateLogger extends Logger with Cloneable {
// def log(msg: String) = println ("Log: " + msg)
def concreteLog {
log("It is me")
}
}
/*
* 继承于Logger,实现log方法
*/
trait TraitLogger extends Logger {
override def log(msg: String) {
println("TraitLogger log content is: " + msg)
}
}
object Test {
def main(args: Array[String]) {
/*
* 在创建对象的时候混入特质
* trait中可以实现很多工具方法,那么根据需要可以随时混入
* 前提:TraitLogger必须必须和ConcreateLogger一样继承于Logger,这样才能覆盖混入
*/
val logger = new ConcreateLogger with TraitLogger
logger.concreteLog
}
}
scala基础16-trait初探/对象中混入trait
最新推荐文章于 2023-09-23 02:17:36 发布