36 阅读1分钟
  1. package
  2. 类似于文件夹
  3. 在某个包下面新建的文件,会自动在开头的部分添加package说明
  4. 在不同的包之间,移动文件,也能自动更新头部的package说明
  5. Scala 包支持传统声明和嵌套声明,推荐花括号方式(更清晰);
  6. 包对象是 Scala 特有,用于存放包级成员,通常放在 package.scala
  7. 导入语法支持重命名、过滤、局部导入,比 Java 更灵活;
  8. 访问权限可指定包范围(private[包名]),精细化控制可见性。
// 包声明
package com.example.shop

// 包对象
package object cart {
  val MAX_ITEM_COUNT: Int = 20
  type ItemMap = Map[String, Int] // 商品名 -> 数量
}

// 包内的类
package cart {
  class ShoppingCart(items: ItemMap) {
    import cart._ // 导入包对象成员
    
    def check(): Unit = {
      if (items.size > MAX_ITEM_COUNT) {
        println("Cart is full!")
      } else {
        println(s"Cart has ${items.size} items")
      }
    }
  }

私有

package com.example.demo

class Item {
  private val id: String = "item_001" // 仅当前类访问
  protected def desc: String = "Default item" // 子类+同包可访问
}

class Book extends Item {
  def show(): Unit = println(desc) // 子类可访问 protected 成员
}