您的位置:首页 > 其它

Scala学习笔记05--特质

2015-03-27 17:01 302 查看
在 Java 或者 Scala 的类中,super.method() 这样的方法调用是静态绑定的,也就是说当你在代码中写下 super.method() 的时候就能明确是调用它的父类的 method() 方法。

然而,如果是在特质中写下了 super.method() 时,它的调用是动态绑定的。调用的实现奖在每一次特质被混入到具体类的时候才被决定。

直截的讲就是超靠近后面的特质越优先起作用。当你调用带混入的类的方法是,最右侧特质的方法首先被调用。如果那个方法调用了 super,它调用其左侧特质的方法。

object TraitTest {

def main(args: Array[String]): Unit = {

val person = new person with sayWorld with sayHello

person.say("hey: ")

}

abstract class animal() {

def say(something: String)

}

class person extends animal {

var word = "I am person! "

def say(something: String) {

word = word + something

print(word)

}

}

trait sayWorld extends animal {

abstract override def say(something: String) {

super.say(something + "world. ")

}

}

trait sayHello extends animal {

abstract override def say(something: String) {

super.say(something + "hello. ")

}

}

}

输出结果:I am person! hey: hello. world.

tips:1.trait里super是动态绑定的。

2.在这种方法上,打上abstract override标志。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: