access modifier
OOP程式有三大特性:封裝性、繼承性、多形性,後面兩者我們已經談過了,至於封裝性我們來說明一下。所謂的封裝性,亦即讓使用者只能接觸到應該接觸到的資料,有一些變數可以被隱藏起來,讓使用者完全看不到,至於怎麼達到這種特性呢?靠的就是access modifier!前面我們常常會看到一些public、private等等字眼,這些就是access modifier,他們限制了成員對使用者來說的可見度,一個public的成員是外面所有人都能夠看得到的,而一個private的成員就只有class自己看得到了。底下列出一張表整理所有的access modifier:
private | member data and function | 只有class本身能看到 |
預設(friendly) | member data and function and class | 同一package都能看到 |
protected | member data and function | 同一package或繼承者都可以看到 |
public | member data and function and class | 所有class都可以看到 |
另外,請注意在進行繼承之後,access modifier是可以更改的,但是只能改得更接近public而不能更private。
modifier
事實上,除了access modifier之外,還有很多種modifier,這裡列的是Java程式中用到的,作為參考:
l static:該成員不屬於任何object,而是直接屬於class本身,換言之,即使沒有任何object從該class被建立出來,這個成員還是存在的。
l final:該成員或class是不允許任何改變的,如果放在class前面,就表示這個class不能夠被繼承。
l synchronized:該函式在同一時間僅能被一個執行緒(thread)執行。
l transient:在將該object序列化[3]之時,該變數不被序列化。
l volatile:對該變數不做任何最佳化處理,亦即要求JVM不對該變數進行cache的動作,以保證每次讀取該變數的時候,都能讀到最新的值。
[1] 嚴格說起來,java class並沒有解構子,只有一個類似解構子的finalize()函式。
[2] 產生object的時候,會一並產生所有的父類別。
[3] Java裡面有一種特殊的serialization功能,可以將一個物件打平成為一群bytes,甚至可以用來存在檔案裡面。
沒有留言:
張貼留言