1,Scala实现接口用关键字extends
2,如果前面有了extends关键字,使用关键字with 实现接口
3,Scala的抽象属性,未被实例化的属性是抽象的,必须要指定抽象属性的类型 val name : Sring ,在子类中可以直接赋值
4,trait中的方法被继承和普通类的继承比较:是不太一样,trait继承过来的是直接添加到子类中。
5,Scala类的实例对象也可以混入接口,以扩展当前对象的实例的功能
trait Logger {
def log(message : String) :Unit = {
println("Logger "+message)
}
}
trait RichLogger extends Logger{
override def log(message : String) :Unit = {
println("RichLogger " + message)
}
}
def log(message : String) :Unit = {
println("Logger "+message)
}
}
trait RichLogger extends Logger{
override def log(message : String) :Unit = {
println("RichLogger " + message)
}
}
class loggin (val name : String ) extends Logger {
def loggin: Unit = {
println("Hi ,welcome "+name)
log(name)
}
}
object HelloTrait {
def main(args : Array[String]) :Unit = {
val personInfo = new loggin("DTSpark") with RichLogger
personInfo.loggin
}
}
def loggin: Unit = {
println("Hi ,welcome "+name)
log(name)
}
}
object HelloTrait {
def main(args : Array[String]) :Unit = {
val personInfo = new loggin("DTSpark") with RichLogger
personInfo.loggin
}
}
6,多个trait时是从右往左顺序执行加载