鍍金池/ 教程/ Scala/ Scala訪問(wèn)修辭符
Scala方法重載
Scala模式匹配
Scala throw關(guān)鍵字
Scala提取器
Scala概述
Scala throws關(guān)鍵字
Scala finally塊
Scala正則表達(dá)式
Scala循環(huán)語(yǔ)句
Scala多線程
Scala函數(shù)
Scala final關(guān)鍵字
Scala方法覆蓋
Scala字符串
Scala線程實(shí)現(xiàn)
Scala異常處理
Scala類和對(duì)象
Scala數(shù)據(jù)類型
Scala單例和伴生對(duì)象
Scala構(gòu)造函數(shù)
Scala教程
Scala Case類和對(duì)象
Scala繼承
Scala開(kāi)發(fā)環(huán)境安裝配置
Scala運(yùn)算符
Scala文件I/O
Scala線程方法
Scala變量
Scala try-catch語(yǔ)句
Scala基礎(chǔ)語(yǔ)法
Scala集合
Scala數(shù)組
Scala閉包
Scala訪問(wèn)修辭符
Scala this關(guān)鍵字

Scala訪問(wèn)修辭符

本章將介紹Scala訪問(wèn)修飾符。包,類或?qū)ο蟮某蓡T可以使用私有(private)和受保護(hù)(protected)的訪問(wèn)修飾符進(jìn)行標(biāo)注,如果不使用這兩個(gè)關(guān)鍵字的其中一個(gè),那么訪問(wèn)將被視為公開(kāi)(public)的。這些修飾符限制了對(duì)某些代碼區(qū)域的成員訪問(wèn)。要使用訪問(wèn)修飾符,請(qǐng)將其關(guān)鍵字包含在包,類或?qū)ο蟮某蓡T的定義中,我們將在下一節(jié)中看到。

私有成員

私有(private)成員只能在包含成員定義的類或?qū)ο髢?nèi)部可見(jiàn)。

以下是示例代碼段解釋私有(private)成員 -

class Outer {
   class Inner {
      private def f() { println("f") }

      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

在Scala,訪問(wèn)(new Inner). f()是非法的,因?yàn)?code>f在Inner類中聲明為private,并且訪問(wèn)不在Inner類內(nèi)。 相比之下,第一次在“InnerMost”類中訪問(wèn)f()是可以的,因?yàn)樵撛L問(wèn)包含在Inner類的主體中。在Java中也允許這樣的兩個(gè)訪問(wèn),因?yàn)樗试S外部類訪問(wèn)其內(nèi)部類的私有成員。

受保護(hù)的會(huì)員

受保護(hù)(protected)成員只能從定義成員的類的子類訪問(wèn)。以下是說(shuō)明受保護(hù)(protected)成員的示例代碼片段 -

package p {
   class Super {
      protected def f() { println("f") }
   }

   class Sub extends Super {
      f()
   }

   class Other {
      (new Super).f() // Error: f is not accessible
   }
}

Sub類中訪問(wèn)f是可行的,因?yàn)?code>f被聲明為在Super類中被保護(hù),Sub類是Super的子類。 相反,不允許訪問(wèn)Other類中的f()方法,因?yàn)?code>Other類不會(huì)從Super類繼承。在Java中,后者的訪問(wèn)將仍然允許,因?yàn)?code>Other類與Sub類在同一個(gè)包中。

公有成員

不同于私有和受保護(hù)的成員,不需要為公有成員使用Public關(guān)鍵字指定。沒(méi)有明確使用修飾符則自動(dòng)歸為公共成員。 這些成員可以從任何地方訪問(wèn)。

以下是解釋公共成員的示例代碼片段 -

class Outer {
   class Inner {
      def f() { println("f") }

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

保護(hù)作用域

Scala中的訪問(wèn)修飾符可以通過(guò)限定符進(jìn)行擴(kuò)充。形式為private [X]protected [X]的修飾符表示為訪問(wèn)是私有或受保護(hù)的“最多”到X,其中X指定一些封閉的包,類或單例對(duì)象。

考慮以下示例 -

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
         }
      }
   }
}

注意 - 以下幾點(diǎn)來(lái)自上面的例子總結(jié) -

  • 變量:workDetails在封閉包professional中的任何類中可訪問(wèn)。
  • 封閉包:friends的任何類都可以被society包中任何類訪問(wèn)。
  • 變量:secrets只能在實(shí)例方法的隱式對(duì)象(this)中訪問(wèn)。