作者  fcamel (飛啊!falling的小駱駝)  看板   P_fcamel
 標題  [Java]   java的封裝層級 (information hidden)
 時間  Mon Feb 16 00:48:56 2004


public > protected > default(package-private) > private

public和private不用多提,
java新建的package級別常讓人搞混,
若不打key word, 以java的術語視為default access,
或稱為package-private會較好懂

這會造成同一package內的class可存取, 但外部不能,
而protected可以讓同package的其它class存取,
不同package可透過inheritance取存取, 所以它的範圍比default大

這點對其它OOPL來說, protected的意思可能會造成混淆

由於有package的觀念, Java不需要類似C++的friend,
在使用上或許較易了解


ex: 以下的例子裡, 可正確編譯和執行 // a/he.java, 需放在目錄a下編譯和執行 package a; public class he { protected int p = 5; int d = 1; // default access }
// a/la.java, 需放在目錄a下編譯和執行 package a; public class la { public void print() { he h = new he(); System.out.println(h.p); System.out.println(h.d); } }
import a.*; class hehe extends he { public void print() { System.out.println(p); // protected field可透過inheritance取得 //System.out.println(d); // compilation error } } public class t { static public void main(String[] args) { hehe hh = new hehe() hh.print(); la a = new la(); a.print(); } }