public/private/protected的具體區(qū)別:
在說明這四個關(guān)鍵字之前,先對class之間的關(guān)系做一個簡單的定義,對于繼承自己的class,base class可以認(rèn)為他們都是自己的子女,而對于和自己一個目錄下的classes,認(rèn)為都是自己的朋友。
1、public:public表明該數(shù)據(jù)成員、成員函數(shù)是對所有用戶開放的,所有用戶都可以直接進(jìn)行調(diào)用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有財(cái)產(chǎn)神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected對于子女、朋友來說,就是public的,可以自由使用,沒有任何限制,而對于其他的外部class,protected就變成private。
4.對于private[spark]這種使用就是:
/**
* Scala 對private關(guān)鍵字進(jìn)行的細(xì)粒度訪問控制
* 和java不一樣的在與protected關(guān)鍵字和private關(guān)鍵字,Scala默認(rèn)的關(guān)鍵字是public
* Scala支持嵌套包定義
* 如果需要對別的包可見的話,可以寫成private[cn],private[limbo]等
* import語句可以寫在任意的位置
*/
package cn.limbo.demo
package society{
package professional{
class Executive {
private [professional] var workDetails = null;
private [society] var friends = null
private [this] var secrets = null //this表示只能在該實(shí)例下才可以訪問該屬性
def help(another : Executive){
println(another.workDetails)
// println(another.secrets) // error
}
}
}
package social {
class Acquaintance() {
def socialize(person:professional.Executive): Unit ={
println(person.friends) // ok
// println(person.workDetails) // error
}
}
}
}