在编程中,“包(Package)” 就像文件柜的抽屉,“导入(Import)” 则是打开抽屉取文件的动作 —— 它们共同解决了类名冲突和代码组织两大核心问题。Scala 作为面向对象与函数式结合的语言,其包和导入机制既保留了 Java 的直观性,又增加了更灵活的语法特性。
一、核心概念:包(Package)的本质与用法
1. 包的定义规则
Scala 中包的定义有两种常见方式:
-
单包声明:如代码中
package test或package art,直接声明当前文件所属的包,所有类 / 对象默认属于该包。 -
嵌套包声明(进阶):支持多层嵌套,例如 package com.company.project,对应文件系统的层级目录(com/company/project)。
2. 代码案例 1:同包下的类访问(无需导入)
第一段代码定义了test包下的Student类:
package test
//package 包
class Student {
println("student....")
}
第二段代码同样在test包下,定义了Main对象并创建Student实例:
package test
object Main {
def main(args: Array[String]): Unit = {
new Student()
}
}
二、核心操作:导入(Import)的三种场景
当需要访问不同包下的类时,就需要通过import语句引入。第三段代码完美演示了跨包导入的基础用法:
3. 基础导入:指定包名。类名
package art
//导入 import
//包名.类名
import test.Student
object Main {
def main(args: Array[String]): Unit = {
new Student()
}
}
三、Scala 类导入的 3 种基础方式
Scala 的导入机制灵活且简洁,针对不同的使用场景,提供了 “导入单个类”“导入多个类”“导入包下所有类” 三种核心方式,我们结合 tools 包的示例逐一解析。
4. 导入单个类:精准引用,减少冗余
当只需要使用某个包下的特定类时,采用 “包名。类名” 的精准导入方式,避免导入无用类造成的资源浪费。
语法格式:import 包名.类名
package toolTest
//import tools.{A,B,C}
import tools._
//1.import 导入一个类。包名 类名
//2.import 导入多个类 包名.{类名1,类名2}
//3.import 导入包下面所有的类 包名._
//4.如果导入一个类,与现有的类名有冲突?
//导入类的时候可以改下名字——重命名
import tools.{C => C1}
//import tools.A
//import tools.B
class C() {
println("C")
}
object Main {
def main(args: Array[String]): Unit = {
new C1()
new C()
}
}