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; } //*************
时间: 2024-11-08 17:31:21