scala学习(十五)——trait
下面是一个trait的简单例子,里面包含的trait的基本用法,trait的继承:
trait Logger{
//这里在java的接口中只能声明为静态的,在trait中能够声明成var,而不必须声明成val,trait可以简单的认为是抽象类和接口
var name = "tom"
def log(msg:String)
def info(msg:String){
log("INFO" + msg)
}
def warn(msg:String){
log("WARN:" + msg)
}
}
trait Logger2{
}
trait Logger3{
}
import scala.reflect._
class Dog extends Logger with Logger2 with Logger3{
override def log(msg:String){
println(msg)
}
def run(){
info("xxx")
}
def setName(s:String){
this.name =s
}
}
object main{
def main(args:Array[String]){
var d = new Dog
d.log("heihei")
d.run
println(d.name)
d.setName("aa")
println(d.name)
}
}
下面是运行截图:
这个也是:
trait Logger{
def log
def newlog(msg:String) = {
println(msg)
}
}
trait Logger2{
def log2
}
trait Logger3{
def log3
}
//多个trait使用with进行连续继承
//特质和类的区别是不能有主构造函数
class Dog extends Logger with Logger2 with Logger3{
def log = println("log")
def log2 = println("log2")
def log3 = println("log3")
}
object main{
def main(args:Array[String]){
var d = new Dog
d.log
d.log2
d.log3
d.newlog("aabbcc")
}
}
下面是运行结果: