W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
包的成員,類(lèi)或?qū)ο罂梢允褂迷L(fǎng)問(wèn)控制修飾符,比如 private 和 protected 來(lái)修飾,通過(guò)這些修飾符可以控制其他部分對(duì)這些類(lèi),對(duì)象的訪(fǎng)問(wèn)。Scala 和訪(fǎng)問(wèn)控制大體上和 Java 類(lèi)似,但也有些重要的不同,本篇將介紹這些。
Scala 的私有成員和 Java 類(lèi)似,一個(gè)使用 private 修飾過(guò)的類(lèi)或?qū)ο蟪蓡T,只能在該類(lèi)或?qū)ο笾性L(fǎng)問(wèn),在 Scala 中,也可以在嵌套的類(lèi)或?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 中定義的私有類(lèi)型,而在 InnerMos t 中訪(fǎng)問(wèn) f 卻是合法的,這是因?yàn)?InnerMost 是包含在 Inner 的定義中(子嵌套類(lèi)型)。 在 Java 語(yǔ)言中,兩種訪(fǎng)問(wèn)都是可以的。Java 允許外部類(lèi)型訪(fǎng)問(wèn)其包含的嵌套類(lèi)型的私有成員。
和私有成員類(lèi)似,Scala 的訪(fǎng)問(wèn)控制比 Java 來(lái)說(shuō)也是稍顯嚴(yán)格些。在 Scala 中,由 Protected 定義的成員只能由定義該成員和其派生類(lèi)型訪(fǎng)問(wèn)。而在 Java 中,由 Protected 定義的成員可以由同一個(gè)包中的其它類(lèi)型訪(fǎng)問(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 訪(fǎng)問(wèn)控制為 Scala 定義的缺省方式,所有沒(méi)有使用 private 和 protected 修飾的成員都是“公開(kāi)的”,可以被自由訪(fǎng)問(wèn)。Scala 不需要使用 public 來(lái)指定“公開(kāi)訪(fǎng)問(wèn)”修飾符。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: