2010年11月18日 星期四

modifier

access modifier

OOP程式有三大特性:封裝性、繼承性、多形性,後面兩者我們已經談過了,至於封裝性我們來說明一下。所謂的封裝性,亦即讓使用者只能接觸到應該接觸到的資料,有一些變數可以被隱藏起來,讓使用者完全看不到,至於怎麼達到這種特性呢?靠的就是access modifier!前面我們常常會看到一些publicprivate等等字眼,這些就是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,甚至可以用來存在檔案裡面。


http://webcache.googleusercontent.com/search?q=cache:-xYKF8I45iEJ:javateach.tripod.com/oop_introduction.doc+java+modifier&cd=18&hl=zh-TW&ct=clnk&lr=lang_zh-TW

沒有留言: