Scala 面向接口编程

1.如果要实现一个接口,前边没有extends关键字就可以使用extends,如果有要使用with关键字

2.Scala 中的接口支持多种继承,类或者抽象类不支持多种继承

3.抽象属性:未被实例化的属性

  定义一个抽象的属性: val name : String,在实现的子类中直接进行赋值。

4.处理类可以混入接口外,Scala类的实例的对象也可以混入接口,以扩展当前对象实例的功能

package com.dtspark.scala.basics

trait Logger{
  def log(message: String){
    println("Logger: " + message)
  }
}

class Loggin(val name: String) extends Logger{
  def loggin{
    println("Hi, welcome ! " + name)
    log(name)
  }
}

trait RichLogger extends Logger{
  override def log(message: String){
    println("RichLogger: " + message)
  }
}

object HelloTrait {
  def main(args: Array[String]): Unit = {
    new Loggin("DTSpark").loggin        //Hi, welcome ! DTSpark
                                        //Logger: DTSpark
    
    val personLoggin = new Loggin("DTSpark") with RichLogger        //混入,好处:类有一个默认的实现,随时可以扩展第三方实现
    personLoggin.loggin                        //Hi, welcome ! DTSpark
                                            //RichLogger: DTSpark
  }
}

6.当继承有多个trait时,多个trait中有同一个方法时,调用的顺序是从由往左,形成一个调用链条。

7.

//********* trait 中一部分是抽象的,一部分是具体的; 如下是 工厂方法 设计模式
trait Information{
  def getInformation: String //抽象的
  def checkIn: Boolean = {
    getInformation.equals("Spark")
  }
}

class Passenger(val name: String) extends Information{
  def getInformation = name;
}
//*************
原文地址:https://www.cnblogs.com/wq3435/p/6996398.html