scala接口继承中第一个关键字一定是extends后面再出现接口要用with来实现接口scala中有个抽象属性:未被实例化的属性,必须说明类型,如val name:Stringscala对象的实例也可以混入接口,以扩展实例对象的功能package com.dt.spark.scala.bascis
trait Logger{def log(message:String){println("Logger: "+ message)}}
trait aLogger extends Logger{println("a Logger: " )override def log(message:String){println("a Logger: "+ message)}}
trait bLogger extends Logger{println("b Logger: " )override def log(message:String){println("b Logger: "+ message)}}
trait cLogger extends Logger{println("c Logger: " )override def log(message:String){println("c Logger: "+ message)}}
trait dLogger extends Logger{println("d Logger: " )override def log(message:String){println("d Logger: "+ message)}}
trait eLogger extends Logger{println("e Logger: " )override def log(message:String){println("e Logger: "+ message)}}
trait RichLogger extends Logger{override def log(message:String){println("RichLogger: "+ message)}}
trait information{def getInformation:Stringdef checkIn:Boolean={getInformation.equals("Spark")}println ("getInformation.equals Spark " +checkIn)}
class Passenger (val name: String){def getInformation=nameprintln("getInformation: " +getInformation )}
class Loggin (val name:String) extends Logger{def loggin{println("Loggin name: "+ name)log(name)}}
object HelloTrait {def main(args: Array[String]): Unit = {new Loggin("DTspark").logginval personLoggin = new Loggin("Hello scala") with RichLoggerpersonLoggin.logginval abcdeLoggin = new Loggin("abcde") with aLogger with bLogger with cLogger with dLogger with eLoggerabcdeLoggin.logginnew Passenger("Spark").getInformationval passenger= new Passenger("Sparkjava") with informationpassenger.checkIn}}
运行结果Loggin name: DTsparkLogger: DTsparkLoggin name: Hello scalaRichLogger: Hello scalaa Logger:b Logger:c Logger:d Logger:e Logger:Loggin name: abcdee Logger: abcdegetInformation: SparkgetInformation: SparkjavagetInformation.equals Spark false