super.
方法便可trait Handler { def handle(data: String) {} //方法 } trait DataValidHandler extends Handler { override def handle(data: String) { //覆盖并实现父类的方法 println("check data: " + data) super.handle(data) } } trait SignatureValidHandler extends Handler { override def handle(data: String) { //覆盖并实现父类的方法 println("check signature: " + data) super.handle(data) } } class Person(val name: String) extends SignatureValidHandler with DataValidHandler { def sayHello = { println("Hello, " + name); handle(name) } } val person = new Person("0mifang") // Hello, 0mifang // check data: 0mifang // check signature: 0mifang person.sayHello
覆盖时,若是使用了super.
方法的代码,则没法经过编译。由于super.
方法就会去调用父 trait 的抽象方法,此时子 trait 的该方法仍是会被认为是抽象的,此时若是要经过编译,就得给子 trait 的方法加上 abstract override 修饰设计模式
trait Logger { def log(msg: String) } trait MyLogger extends Logger { abstract override def log(msg: String) { super.log(msg) } }
trait Valid { def getName: String //抽象方法 def valid: Boolean = { //检验输入名称的方法 getName == "0mifang" } } class Person(val name: String) extends Valid { 。。。