Scala/訪問修飾符
外觀
< Scala
Scala 提供了多個訪問修飾符。訪問修飾符可用於更改類、物件、特質和包的成員在哪些上下文中可訪問。限制對成員的訪問有助於將介面與實現分離,確保和驗證不變式並維護成員的完整性。
訪問修飾符更改了成員可以被引用的時間。嘗試引用不可訪問的成員會導致編譯時錯誤。
成員的預設訪問修飾符是“公共”訪問修飾符。具有“公共”訪問許可權的成員可以在任何地方訪問。沒有“公共”訪問許可權的關鍵字。
“私有”訪問修飾符禁止在成員定義範圍之外的任何地方訪問。
class StopWatch {
//INVARIANT: "seconds" is 0 or positive (assuming no overflows).
private var seconds = 0
def addSeconds(secondsAmount:Int) {
if (secondsAmount > 0) {
seconds += secondsAmount
}
}
def currentSeconds = seconds
}
val stopWatch = new StopWatch
stopWatch.addSeconds(-10)
println("Seconds: " + stopWatch.currentSeconds) //Prints "Seconds: 0".
stopWatch.addSeconds(5)
println("Seconds: " + stopWatch.currentSeconds) //Prints "Seconds: 5".
//ERROR: Does not compile!
//stopWatch.seconds = -10
名為“StopWatch”的類在第一部分定義。類的第一個成員定義是“private var seconds = 0”。關鍵字“private”用於“var”宣告之前,表示以下變數,此處為“seconds”,具有私有訪問許可權。這意味著它只能在包含類“StopWatch”的範圍內訪問。“addSeconds”和“currentSeconds”分別修改和檢索“seconds”。請注意,“addSeconds”阻止將負值新增到“seconds”。類定義之後的行例項化類“StopWatch”的例項,並呼叫不同的方法。無法使用“addSeconds”方法從“seconds”中減去,並且嘗試透過在“StopWatch”之外直接引用“seconds”來操作它會在編譯時失敗。因此,始終遵守要求“seconds”為 0 或正數的不變式,假設沒有溢位。