scala学习笔记【7】包和引入
Sep 6, 2016包
scala的包目的和Java中的包一样:管理大型程序中的名称。
要增加条目到包中,可以将其包含在包语句中,例如:
这样一来,类名Employee就可以在任意位置以com.horstman.patient.Employee访问了。
与对象和类的定义不同,同一个包可以定义在多个文件中。
源文件的目录和包之间并没有强制的关联关系,也就是说可以在同一个文件中定义多个包。
作用域规则
在scala中,包的作用域比Java更加前后一致,scala的包和其他作用域一样支持嵌套。可以访问上层作用域中的名称。
在Java中包名是绝对的,从包层级的最顶端开始,但是在scala中,包名是相对的,就像内部类的名称一样。
串联式包语句
包语句可以包含一个串,或者说路径区段:
这条语句限制了可见的成员。
文件顶部标识法
除了使用嵌套标记法之外,还可以在文件顶部使用package语句,不带花括号。
包对象
包可以包含类,对象和特质,但是不能包含函数和变量的定义。
每个包可以有一个包对象,你需要在父包中定义它,且名称和子包一样。
例如:
包可见性
在Java中,没有被声明为public、private或protected的类成员在包含该类的包中可见。在scala中,可以通过修饰符达到同样的目的。
引入
引入语句可以让你使用更短的名字而不是原来较长的名字。
写法如下:
引入包中全部成员:
任何地方都可以声明引入
在scala中,import语句可以出现在任意地方,并不仅限于文件顶部,import语句的效果一直延伸到包含该语句的块末尾。
重命名和隐藏
如果你想引入包中的几个成员,可以像这样使用选取器:
选取器还允许你重命名选到的成员:
选取器HashMap => _
将隐藏某个成员而不是重命名它。
隐式引入
每个scala程序都隐式的以如下代码开始:
由于scala包默认导入,对于那些以scala开头的包,你完全不需要写全这个前缀。