@(Spark)[接口]
- 当接口中没有抽象方法, 则该接口时接口工具类, 子类继承该类纯为了使用该接口方法
- 接口可以用多重继承, 其中基类为extends, 其他的使用多个with进行继承
- scala的接口支持多重继承, 但是类或者抽象类不支持多重继承, 多重继承使用with(混入)
-使用with trait中的属性会注入当前类, 使用extends, trait中的属性在父类对象中 - with关键词可以实现接口, 实例必须复写接口中的抽象方法.
- 抽象属性
//必须声明类型
val name : String
- scala的类的实例对象也可以混入接口, 以扩展当前对象的实例功能.
- 对象可以混入trait
trait Logger {
def log(message : String) {
println("Logger:" + message)
}
}
trait RichLogger extends Logger{
override def log(message : String) {
println("RickLogger:" + message)
}
}
class Loggin(val name :String) extends Logger{
def loggin{
println("Hi, welcome" + name)
log(name)
}
}
object HelloTrait{
def main(args: Array[String]) {
val log = new Loggin("Spark") with RichLogger
log.loggin
}
}
- 多个继承时, 相同的方法从右往左调用
- 使用trait经典模板方法
trait Information {
def getInformation : String
def checkIn : Boolean ={
getInformation.equals("Spark")
}
}
class Passenger(val name :String) extends Information {
override def getInformation: String = name
}
def main(args: Array[String]): Unit = {
val personLoggin = new Passenger("Spark")
println(personLoggin.checkIn)
}