Scala使用包来创建用于模块化程序的命名空间。通过在Scala文件的顶部声明一个或多个包名称可以创建包,另一种声明包的方式是使用0,这种方式可以嵌套包,并且提供更好的范围与封装控制。对于包的导入,Scala与Java的区别之一便是,Scala可以在任意位置使用import语句。
1.1 Scala的包
下面主要从包的定义、语法以及包的作用域介绍Scala包的相关知识。通过与Java中包的作用域对比说明两者的区别与联系。
1.Scala的包定义
相比于Java中的包,Scala中的包可以定义在文件的开头,也可以在代码的任意位置。Scala的包用于解决类的命名冲突和类的文件管理。在引入类时加上包名可以区分不同的类,解决类名冲突的问题。 类的文件管理就是通过包名可以把具有相同功能的不同类组织在一起,放入同一个包中。
2.Scala包的语法
Java中包的语法为:
package name
与Java相比,Scala中有两种包的定义语法,第一种与Java相同,第二种包的语法格式为:
package name{
}
通过第二种方式,可以在{ }中定义不同的包,实现包的嵌套。
1.2 Scala的包的导入
为了解决不使用包的全名这一问题,引入了包的导入方法。包的导入有两种方式,一种是显式导入,另一种是隐式导入。Scala中的隐式导入表示每个Scala程序默认都会隐式导入java.lang._和scala. Predef._中的所有成员。
1.Scala的导入语法
在Scala中显式导入包使用import关键字。假如m包下有A、B、C三个类,如果想要导入 m包下所有类,使用import m. ;如果只需要导入m包中的A类,使用import m.A; 如果想要导入A和B两个类,使用import m.{A,B}。
2.导入成员重命名
如果在个类中需要导入不同包中的成员且成员名相同,可以通过导入成员重命名的方式区分不同包中的成员,其语法格式为:
import {A=>a}
例如, import com.B.{a=>b}表示把B包中的a类重命名为b。
3.导入成员隐藏类
如果一个包中包含多个类,除包中某一个类之外都需要导入,可以使用导入成员隐藏类的方法, 其语法格式为:
import {A=>_,_}
其中第一个_表示需要隐藏的类,第二个_表示除需要隐藏的类之外的所有类。例如包A中有a,b,c,d四个类,需要隐藏d类,则可以使用import com.A.{d=>_,_}表示。
相关代码如下:
//1.单个导入
//import com.scala02.A
//import com.scala02.B//2.导入多个
//import com.scala02.{A,B}//3.导入一个包下所有的类:包名._
//import com.scala02._//4.导入一个包中的类,给他改个名字
//格式:import 包名.{原来的名字 => 新名字}
//import com.scala02.{A => BigA}//5.隐藏导入类
import com.scala02.{C=>_,_}object Test23 {//5.局部导入,就在方法内部去导入要用的包def main(args: Array[String]): Unit = {
// import com.scala02.{A => BigA}
// new BigA()new A()new B()new C()new Student()}
}
1.3 Scala的包对象
包对象的语法如下:
package object 包名