Scala訪問修飾符和Java基本同樣,分別有private、protected、public。默認缺省狀況下,Scala對象的訪問級別是public。
私有成員:用private關鍵字修飾的成員僅在包含了成員定義的類內部或對象內部可見。Java中容許這兩種訪問,它容許外部類訪問內部類的私有成員。
1 class test{}class Outer{ 2 class Inner{ 3 private def p(){ 4 println( "p") 5 } 6 class InnerMost{ 7 p() //正確 8 } 9 } 10 //(new Inner).f("Outer") //錯誤,外層類不能訪問被嵌套類的私有成員,Java中支持 11 }
保護成員:Scala比Java中更嚴格。只容許保護成員在定義了該成員的類的子類中被訪問。Java中除定義了該保護成員的類的子類中可被訪問,同一個包下的其餘類也能夠進行訪問。
1 package p{ 2 class Supper{ 3 protected def p(){ 4 println("p") 5 } 6 } 7 8 class Sub extends Supper{ 9 p() //正確 10 } 11 12 class other{ 13 // (new Supper).p() //錯誤,只有子類能夠。java支持,protected成員在同包下類中也可訪問 14 } 15 }
公共成員:默認public,這樣的成員在任何地方均可以被訪問。
1 class test{}class Outer{ 2 class Inner{ 3 def p(){ 4 println( "p") 5 } 6 class InnerMost{ 7 p() //正確 8 } 9 } 10 //(new Inner).f("Outer") //正確 11 }
做用域保護java
Scala中訪問修飾符能夠經過使用限定詞強調。格式private[x] 或 protected[x]this
X指某個所屬的包、類、單例對象。private[x],讀做「這個成員除了對[…]中的類或[…]中的包中的類及它們的伴生對象可見外,對其餘全部類都是privatespa
Private[this] val x,只能被this訪問,即只能被當前對象訪問code
Private val x,能夠被另外一個對象訪問orm
Java的訪問權限表對象
不寫(default)默認:包內可訪問blog
Private私有:類內可訪問ci
Protected保護:包內和子類可訪問作用域
Public公有:均可訪問ast