内容:
1 包、类、对象、成员访问权限实战
2 伴生类、伴生对象访问权限实战
/**
* Scala中包、类、对象、成员、伴生类、伴生对象访问权限
*/
package spark {
package navigation {
//class前的private 用于限定该类的访问权限,表示Navigator的访问权限可以扩展到spark包下,对包含在spark包内的所有类和对象可见。
private[spark] class Navigator{
//useStarChart前的protected,表示useStarChart不仅对nabigation的包内所有代码可以访问,而且Navigator的类和对象可见,对Navigator的子类也可见。
protected[navigation] def useStarChart(){}
class LegOfJourney {
private[Navigator] val distance = 100
}
private[this] var speed = 200
//private[this]只能当前实例访问自己,即使外部有同属一个类的不同对象也不能访问。
}
}
package launch{
import navigation._
object Vehice {
//launch包在spark包内,所以直接访问Navigator
private[launch] val guide = new Navigator
}
}
}
//伴生类可以随便访问伴生对象,伴生对象可以随便访问伴生类。伴生类如果有protected则子类可以访问,但伴生对象如果有protected,而伴生对象没有子类或子对象去访问。
class PackageOps_Advanced{
import PackageOps_Advanced.power
private def canMakeItTrue = power > 10001
}
object PackageOps_Advanced {
private def power = 10000
def makeItTrue(p: PackageOps_Advanced): Boolean = {
val result = p.canMakeItTrue
result
}
}