支持嵌套,下层可以访问上层作用域中的名称
可串联
顶部标记
包对象
包可见性
包在任何地方都可以引入,作用域至该语句所在块的末尾
重命名引入成员(xx => yy)
隐藏方法(xx =>_)
自动引入(java.lang._ scala._ Predef._)
支持嵌套,下层可以访问上层作用域中的名称
包可以嵌套,一个包可以定义在多个文件当中,也不需要将源文件和包之间对应起来;
packagecom.benlai{classFruit{
def sell : Unit={
println("all fruit sell out")
}
}packagelife{classApple {
def currentState : Unit={
val f= new Fruit //不需要引入Fruit的包
f.sell
}
}
}
}
可串联
串联式包名,上级包的成员不可见
package com{
class Fruit{
def sell : Unit= {
println("all fruit sell out")
}
}
}
package com.benlai{
//此处不可见com包成员
class Apple {
def currentState : Unit = {
import com.Fruit
val f = new Fruit //不可见com成员,需要引入Fruit的包
f.sell
}
}
class Banana {
.....
}
}
顶部标记
代码位于同一个包内,在文件顶部标记包;
packagecom.benlaipackagelifeclassApple {
def currentState : Unit={
println("this is an apple")
}
}classBanana {
def currentState : Unit={
println("this is a banana")
}
}
文件的内容在com.benlai.life包中,com.benlai包中的内容对com.benlai.life均可见;但com包中成员对com.benlai.life不可见
包对象
类似于Java中将一个Util类定义在一个静态类中一样,包对象就是将一些常用的方法写在一个package object中,需要的时候,引入这个包;
packagecom.benlai.lifepackageobject DateUtil {
val info= "current date ...."def display():Unit={
println("info is " +info)
}
}
//在 Fruit对象中调用DateUtil的display方法
classFruit {
def currentInfo():Unit={importcom.benlai.life.DateUtil
DateUtil.display()
}
}
包的可见性
scala中类内的成员默认是公有访问权限的,如果想要把scala的成员设定为私有类型的需添加 private[package-name];如 private[this] val name:String = "jack"
package com.benlai
class Person{
val name:String = "jack" //公有访问权限
private[this] val age:Int = 21 //类内成员可访问
private[com] val address:String = "shanghai" //com、com.benlai包下成员可访问
}
包在任何地方都可以引入,作用域至该语句所在块的末尾
{
import package com.benlai.Person //作用域在这个"块"中有效,这个"块"外无效
}
重命名引入成员(xx => yy)和隐藏方法
//重命名引入成员
import java.util.{HashMap=>JHashMap}//引入java.util包下的所有成员除去HashMap外;
improt java.util.{HashMap=>_,_}
自动引入
scala会自动引入java.lang._、scala._、Predef._这些包