1.包
Scala包的命名方式有兩種。一種和Java一樣,通過把package子句放在文件頂端的方式,把整個文件的內容放進包里。如:
package scala.actors.Actor
另一種方式可以在package子句之后把要放到包里的定義用花括號括起來。如:
package bobsrockets{
package navigation{
//在bobsrockets.navigation包中
class Navigator
package tests{
//在bobsrockets.navigation.tests包中
class NavigatorSuite
}
}
}
另外,Scala在所有用戶可創建的包之外提供了名為_root_的包,即任何你能寫出來的頂層包都被當做是_root_包的成員。如:
//文件launch.scala
package launch{
class Booster3
}
//文件bobsrockets.scala
package bobsrockets{
package navigation{
package launch{
class Booster1
}
class MissionControl{
val booster1 = new launch.Booster1
val booster2 = new bobsrockets.launch.Booster2
val booster3 = new _root_.launch.Booster3
}
package launch{
class Booster2
}
}
}
2.引用
Scala的import與Java的import的差異:
可以出現在任何地方;
可以指的是(單利或正統的)對象或包
可以重命名或隱藏一些被引用的成員
e.g
//只引用linalg中的DenseMatrix和DenseVector
import breeze.linalg.{DenseMatrix, DenseVector}
//將DenseMatrix重命名為BDM
import breeze.linalg.{DenseMatrix => BDM, DenseVector}
//引用linalg中的所有成員
import breeze.linalg._
//引用linalg中除了DenseMatrix的所有成員
import breeze.linalg.{DenseMatrix => _, _}
Scala的import的使用規則:
簡單名x。把x包含進引用名集合;
重命名子句x => y。讓名為x的成員以名稱y出現;
隱藏子句x => _。把x排除在引用名集合之外;
全包括“_”。引用除了前面子句提到的之外的全體成員。如果存在全包括,那么必須是引用選擇的最后一個。
另外,“.scala”文件都隱式的添加了如下引用:
import java.lang._ import scala._ import Predef._
3.訪問修飾符
Scala和Java修飾符的不同點,如下表:

保護的作用域
Scala里的訪問修飾符可以通過使用限定詞強調。格式為private[X]或protected[X]的修飾符表達“直到”X的私有或保護,這里X指代某個所屬的包、類或單例對象。
特例:被private[this]標記的定義僅能在包含了定義的同一個對象中被訪問。
參考文獻:
《Scala編程》
