第十一课:Scala面向接口编程彻底实战
Scala中的接口是trait,但是trait是可以有具体方法的,当trait中全是具体方法的时候,就变成了工具类
1.trait中可以是每个方法都被实现,例如SparkContext的Logging,这种类一般都作为工具类
class SparkContext(config: SparkConf) extends Logging with ExecutorAllocationClient {
ExecutorAllocationClient 也是一个接口
2.可以发现,Logging和ExecutorAllocationClient 都是接口,即使Logging是接口,当实现第一个接口的时候,仍然使用extends关键字,后面的接口用with关键字
3.Scala中的trait支持多重继承,而之前提到的类和抽象类并不支持多重继承,正因为可以多重继承,所以可以继承很多工具类(接口)
接口的继承和普通的类的继承是否是一样的呢?
是不一样的,假如是类的继承,field是属于父类的,而接口的继承,field是属于子类的
4.Scala有一个抽象属性,抽象属性必须写类型,例如val name:String,这样子类必须实现该属性
5.Scala的类的实例对象也可以混入接口,以扩展当前对象实例的功能
例如:
package com.dt.spark.scala.basics
trait Logger {
def log(message: String) = println(message)
}
trait RichLogger extends Logger {
override def log(message: String) = println("Rich:"+message)
}
class Login(val name: String) extends Logger {
def login() {
println("Hi,"+name)
log("haha")
}
}
object HelloTradit {
def main(args:Array[String]){
val login=new Login("john") with RichLogger
login.login()
}
}
好处在于:类可以有默认的实现,同时可以随时扩展自己的实现!!!!!
6.多重继承的时候,继承了多个接口,先执行哪一个接口呢?这是很重要的,因为可能不同的接口里面有共同的方法,那这时候顺序就很重要了
是从右往左执行
归纳总结:1.Scala中的接口是什么?它的特点是什么
2.Scala中类和抽象类,接口等支持多重继承吗?
3.Scala中的抽象属性
4.关于对象混入,好处?
5.多重继承的时候,继承了多个接口,先执行哪一个接口呢?
转载于:https://my.oschina.net/u/1449867/blog/725573