位置:首頁 > 高級語言 > Scala教學 > Scala訪問修飾符

Scala訪問修飾符

包,類或對象的成員可以標記訪問修飾符private和protected,如果我們不使用這兩種關鍵字,那麼訪問將被默認設置為public。這些修飾限製為成員的代碼的某些區域訪問。要使用訪問修飾符,包括它的包,類或對象的成員定義的關鍵字,我們將在下一節中看到。

私有成員:

私有成員隻能看到裡麵包含的成員定義的類或對象。下麵是一個例子:

class Outer {
   class Inner {
      private def f() { println("f") }
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

在Scala中,訪問 (new Inner).f() 是非法的,因為f被聲明為private內部類並且訪問不是在內部類內。與此相反,到f第一接入類最內層是確定的,因為該訪問包含在類內的主體。 Java將允許這兩種訪問,因為它可以讓其內部類的外部類訪問私有成員。

保護成員:

受保護的成員是從該成員定義的類的子類才能訪問。下麵是一個例子:

package p {
   class Super {
      protected def f() { println("f") }
   }
   class Sub extends Super {
      f()
   }
   class Other {
     (new Super).f() // Error: f is not accessible
   }
}

類分給 f 訪問是正常的,因為f被聲明為受保護的超類和子類是超級的子類。相比之下,訪問 f 在其他是不允許的,因為其他冇有從超級繼承。在Java中,後者訪問將仍然允許的,因為其他的是在同一個包子。

公共成員:

未標示私有或受保護的每一個成員是公開的。不需要明確使用修飾符public。這樣的成員可以從任何地方訪問。下麵是一個例子:

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // OK because now f() is public
}

保護範圍:

Scala中的訪問修飾符可以增加使用修飾符。形式:private[X]或protected[X]的修飾符意味著訪問私有或受保護“達到”X,其中X代表了一些封閉的包,類或單個對象。考慮下麵的例子:

package society {
   package professional {
      class Executive {
         private[professional] var workDetails = null
         private[society] var friends = null
         private[this] var secrets = null

         def help(another : Executive) {
            println(another.workDetails)
            println(another.secrets) //ERROR
         }
      }
   }
}

注意,上麵的例子中以下幾點:

  • 變量workDetails將可對任何一類封閉包professional範圍內。

  • 變量friends 將可對任何一類封閉包society中。

  • 變量secrets 將可隻在實例方法隱含的對象(this)。