Scala 学习(8)之「trait (2) 」

时间:2020-02-11 01:28:08   收藏:0   阅读:77

trait调用链

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

在 trait 中覆盖抽象方法

覆盖时,如果使用了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 的具体方法和抽象方法

trait Valid {
    def getName: String //抽象方法
    def valid: Boolean = {  //检验输入名称的方法
        getName == "0mifang"    
    }
}
class Person(val name: String) extends Valid {

。。。

扫码查看历史消息,可获得完整版文章

技术分享图片

原文:https://www.cnblogs.com/Alex458/p/12293406.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!