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 { 。。。