9.3.4 带有特质的对象:动态混入
除了可以在类声明时继承特质以外,还可以在构建对象时混入特质,扩展目标类的功能.
package com.atguigu.day06
import java.sql.Connection
object TraitMix {
def main(args: Array[String]): Unit = {
// 创建 Mysql 对象的时候, 指定一个新的特质
val mysql = new Mysql with BetterConnectDB
mysql.connectToMysql()
// 如果再创建新的对象, 也可以换另外的特质. 这就叫动态混入
}
}
//这个特质用来连接数据库
trait ConnectToDB {
// 什么都不做的实现方法
def getConn() {}
}
class Mysql extends ConnectToDB {
// 连接到Mysql
def connectToMysql(): Unit = {
// 获取连接
getConn()
//其他代码
}
}
/*
上面的 getConn其实什么都没有做, 感觉没有什么用
但是我们创建 Mysql对象的时候, 可以给他指定一个更好的特质
*/
// 一个更好的特质
trait BetterConnectDB extends ConnectToDB {
override def getConn(): Unit = { // 注意这个时候需要添加override
println("更好的获取连接....")
}
}
说明:
动态混入是Scala特有的方式(java没有动态混入),可在不修改类声明/定义的情况下,扩展类的功能,非常的灵活,耦合性低
动态混入可以在不影响原有的继承关系的基础上,给指定的类扩展功能