trait 中覆盖抽象方法 abstract override
scala> trait Logger { def log(log:String)}
defined trait Logger
scala> trait aLogger{ abstract override def log(log:String){ println("---a---"+log);super.log(log)}
| }
<console>:11: error: value log is not a member of AnyRef
trait aLogger{ abstract override def log(log:String){ println("---a---"+log);super.log(log)}
^
scala> trait aLogger extends Logger{ abstract override def log(log:String) { println("--a--"+log);super.log(log)}}
defined trait aLogger
----------------------------------
trait 中混合使用 抽象方法 和 具体方法
可以用来实现 模板方法 模式
scala> :paste
// Entering paste mode (ctrl-D to finish)
trait Valid {
def getName:String
def valid:Boolean = {
if("tomcat"==getName)
true
else
false
}
}
// Exiting paste mode, now interpreting.
defined trait Valid
scala> class C1 extends Valid {
| def getName:String ={ "xcatlina"}
| }
defined class C1
scala>
scala>
scala> var a = new C1
a: C1 = C1@3df681cc
scala> a.valid
res1: Boolean = false
scala> class C2 extends Valid { def getName:String ={ "tomcat"} }
defined class C2
scala> var b = new C2
b: C2 = C2@139da216
scala> b.valid
res2: Boolean = true