1.若是要實現一個接口,前邊沒有extends關鍵字就可使用extends,若是有要使用with關鍵字設計模式
2.Scala 中的接口支持多種繼承,類或者抽象類不支持多種繼承ide
3.抽象屬性:未被實例化的屬性spa
定義一個抽象的屬性: val name : String,在實現的子類中直接進行賦值。scala
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中有同一個方法時,調用的順序是從由往左,造成一個調用鏈條。code
7.orm
//********* trait 中一部分是抽象的,一部分是具體的; 以下是 工廠方法 設計模式 trait Information{ def getInformation: String //抽象的 def checkIn: Boolean = { getInformation.equals("Spark") } } class Passenger(val name: String) extends Information{ def getInformation = name; } //*************