鍍金池/ 教程/ Scala/ 訪問(wèn)控制修飾符
包對(duì)象
Ordered Trait
組合和繼承–定義 final 成員
基本數(shù)據(jù)類型
Match 表達(dá)式
類和對(duì)象 (三)
操作基本數(shù)據(jù)類型
for 表達(dá)式
組合和繼承–重載成員函數(shù)和方法
類和對(duì)象 (二)
組合和繼承–定義 factory 對(duì)象
組合和繼承–多態(tài)和動(dòng)態(tài)綁定
Trait 的基本概念
if 表達(dá)式
組合和繼承–抽象類
函數(shù)–函數(shù)字面量的一些簡(jiǎn)化寫法
while 循環(huán)
組合和繼承–使用組合還是繼承?
訪問(wèn)控制修飾符
Trait 示例–Rectangular 對(duì)象
組合和繼承–定義參數(shù)化成員變量
組合和繼承–定義無(wú)參數(shù)方法
類和對(duì)象 (一)
函數(shù)–閉包
函數(shù)–類成員函數(shù)
Scala 基本數(shù)據(jù)類型的實(shí)現(xiàn)方法
try 表達(dá)式處理異常
選擇瘦接口還是胖接口設(shè)計(jì)?
組合和繼承–小結(jié)
創(chuàng)建新的控制結(jié)構(gòu)
使用 import
為訪問(wèn)控制修飾符添加作用域
Scala 的類層次關(guān)系
類和對(duì)象 (五)
傳名參數(shù)
柯里化函數(shù)
函數(shù)–頭等公民
組合和組合和繼承–定義 heighten 和 widen 函數(shù)
使用 Package–將代碼放入包中
隱含的 import
所有類的公共子類–底層類型
進(jìn)一步 Scala
函數(shù)–局部函數(shù)
引用包中的代碼
組合和繼承–使用 override 修飾符
組合和繼承–實(shí)現(xiàn)類 Element 的 above,beside 和 toString()方法
類和對(duì)象 (四)
函數(shù)–尾遞歸
沒(méi)有“break”和“continue”的日子
組合和繼承–調(diào)用基類構(gòu)造函數(shù)
減低代碼重復(fù)
函數(shù)–函數(shù)–可變參數(shù),命名參數(shù),缺省參數(shù)
起步 Scala
組合和繼承–擴(kuò)展類
函數(shù)–部分應(yīng)用的函數(shù)
開始神奇的 Scala編程之旅
組合和繼承–概述
Trait 用來(lái)實(shí)現(xiàn)可疊加的修改操作

訪問(wèn)控制修飾符

包的成員,類或?qū)ο罂梢允褂迷L問(wèn)控制修飾符,比如 private 和 protected 來(lái)修飾,通過(guò)這些修飾符可以控制其他部分對(duì)這些類,對(duì)象的訪問(wèn)。Scala 和訪問(wèn)控制大體上和 Java 類似,但也有些重要的不同,本篇將介紹這些。

私有成員

Scala 的私有成員和 Java 類似,一個(gè)使用 private 修飾過(guò)的類或?qū)ο蟪蓡T,只能在該類或?qū)ο笾性L問(wèn),在 Scala 中,也可以在嵌套的類或?qū)ο笾惺褂?。比如?/p>

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()是不合法的,因?yàn)樗窃?Inner 中定義的私有類型,而在 InnerMos t 中訪問(wèn) f 卻是合法的,這是因?yàn)?InnerMost 是包含在 Inner 的定義中(子嵌套類型)。 在 Java 語(yǔ)言中,兩種訪問(wèn)都是可以的。Java 允許外部類型訪問(wèn)其包含的嵌套類型的私有成員。

保護(hù)成員

和私有成員類似,Scala 的訪問(wèn)控制比 Java 來(lái)說(shuō)也是稍顯嚴(yán)格些。在 Scala 中,由 Protected 定義的成員只能由定義該成員和其派生類型訪問(wèn)。而在 Java 中,由 Protected 定義的成員可以由同一個(gè)包中的其它類型訪問(wèn)。在 Scala 中,可以通過(guò)其它方式來(lái)實(shí)現(xiàn)這種功能。

下面為 protected 的一個(gè)例子:

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

公開成員

public 訪問(wèn)控制為 Scala 定義的缺省方式,所有沒(méi)有使用 private 和 protected 修飾的成員都是“公開的”,可以被自由訪問(wèn)。Scala 不需要使用 public 來(lái)指定“公開訪問(wèn)”修飾符。