有兩種方法來聲明包,并把代碼放入其中
- 類似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
}
}
}
//避免花括號導(dǎo)致代碼右移的寫法
package bobsrockets
package navigation
class Navigator
當訪問同一個包中的代碼時,可以使用簡短的非限定名稱晚吞,省略部分前綴
引入包
import scala.collection._ //引入collection中的所有成員
import scala.collection.Vector
import scala.collection.{Vector, Sequence} //選擇性導(dǎo)入一個或多個
import scala.collection.{Vector => Vec28} //重命名導(dǎo)入
import java.util.{Date => _, _} //導(dǎo)入java.util包里除Date之外的所有文件
隱式引入
import java.lang._
import scala._//包含Scala的標準庫延旧,例如List
import Predef._//Predef對象包含類型定義,方法,隱式轉(zhuǎn)換等
Scala中引入可以出現(xiàn)在任何地方载矿,不必出現(xiàn)在文件的開始
def showFruit(fruit: Fruit) = {
import fruit._
println(name + "s are " + color)
}
訪問修飾符
總體和Java類似垄潮,有一些不同
-
private
:只能在class或者trait內(nèi)部可見,外部類不能不能訪問內(nèi)部類的私有成員 -
protected
:子類可見闷盔,同一個包中的其他類不可見(Java中對同一個包內(nèi)的類也是可見的) -
public
:沒有標識private
和protected
的都是public
private[X]
和protected[X]
:限定訪問是私有的或者受保護的弯洗,直到X作用域以內(nèi)
private[this]
:對象私有,object-private逢勾,只有對象自己在類內(nèi)部可以訪問牡整,其他相同的實例對象都不能訪問
伴生對象:只有一個實例,實現(xiàn)static的功能溺拱,擁有對應(yīng)類的所有訪問權(quán)限
包對象
添加了關(guān)鍵字object
逃贝,作用域是整個包,添加一些幫助方法迫摔,類型別名沐扳,隱式轉(zhuǎn)換等
package object bobsdelights {
def showFruit(fruit: Fruit) = {
import fruit._
println(name + "s are " + color)
}
}