在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

Scala訪問修辭符

本章將介紹Scala訪問修飾符。包,類或對象的成員可以使用私有(private)和受保護(protected)的訪問修飾符進行標注,如果不使用這兩個關鍵字的其中一個,那么訪問將被視為公開(public)的。這些修飾符限制了對某些代碼區(qū)域的成員訪問。要使用訪問修飾符,請將其關鍵字包含在包,類或對象的成員的定義中,我們將在下一節(jié)中看到。

私有成員

私有(private)成員只能在包含成員定義的類或對象內部可見。

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

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()是非法的,因為fInner類中聲明為private,并且訪問不在Inner類內。 相比之下,第一次在“InnerMost”類中訪問f()是可以的,因為該訪問包含在Inner類的主體中。在Java中也允許這樣的兩個訪問,因為它允許外部類訪問其內部類的私有成員。

受保護的會員

受保護(protected)成員只能從定義成員的類的子類訪問。以下是說明受保護(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類中訪問f是可行的,因為f被聲明為在Super類中被保護,Sub類是Super的子類。 相反,不允許訪問Other類中的f()方法,因為Other類不會從Super類繼承。在Java中,后者的訪問將仍然允許,因為Other類與Sub類在同一個包中。

公有成員

不同于私有和受保護的成員,不需要為公有成員使用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)中訪問。

上一篇:Scala函數下一篇:Scala this關鍵字