有两种方法来声明包,并把代码放入其中
- 类似Java的方式
- 类似名称空间的个方式,包名后加大括号,可以进行嵌套,灵活的进行省略
任何顶层包都被当做_root_
包的成员,当包名称冲突时,可以从最外层指定包名
package bobsrockets.navigation
class Navigator
package bobsrockets.navigation {
class Navigator
}
//将文件的不同部分放在不同的包中
package bobsrockets {
package navigation {
// In package bobsrockets.navigation
class Navigator
package tests {
// In package bobsrockets.navigation.tests
class NavigatorSuite
}
}
}
//避免花括号导致代码右移的写法
package bobsrockets
package navigation
class Navigator
当访问同一个包中的代码时,可以使用简短的非限定名称,省略部分前缀
引入包
import scala.collection._ //引入collection中的所有成员
import scala.collection.Vector
import scala.collection.{Vector, Sequence} //选择性导入一个或多个
import scala.collection.{Vector => Vec28} //重命名导入
import java.util.{Date => _, _} //导入java.util包里除Date之外的所有文件
隐式引入
import java.lang._
import scala._//包含Scala的标准库,例如List
import Predef._//Predef对象包含类型定义,方法,隐式转换等
Scala中引入可以出现在任何地方,不必出现在文件的开始
def showFruit(fruit: Fruit) = {
import fruit._
println(name + "s are " + color)
}
访问修饰符
总体和Java类似,有一些不同
-
private
:只能在class或者trait内部可见,外部类不能不能访问内部类的私有成员 -
protected
:子类可见,同一个包中的其他类不可见(Java中对同一个包内的类也是可见的) -
public
:没有标识private
和protected
的都是public
private[X]
和protected[X]
:限定访问是私有的或者受保护的,直到X作用域以内
private[this]
:对象私有,object-private,只有对象自己在类内部可以访问,其他相同的实例对象都不能访问
伴生对象:只有一个实例,实现static的功能,拥有对应类的所有访问权限
包对象
添加了关键字object
,作用域是整个包,添加一些帮助方法,类型别名,隐式转换等
package object bobsdelights {
def showFruit(fruit: Fruit) = {
import fruit._
println(name + "s are " + color)
}
}
网友评论