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没有动态混入),可在不修改类声明/定义的情况下,扩展类的功能,非常的灵活,耦合性低

  • 动态混入可以在不影响原有的继承关系的基础上,给指定的类扩展功能

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-07-02 08:12:45

results matching ""

    No results matching ""