訪問控制符:public 、private、protected、friendly
public包內包外均可訪問。
private只有本類可訪問。
protected針對繼承而使用的:1、包內繼承,因為在包內,聲明為protected不影響它本來的friendly權限。
2、包外繼承,必須聲明為protected。
派生類可以訪問基類的protected成員。
注意不可將類設成private(那樣會使除類之外的其他東西都不能訪問它),也不能設成protected。因此,我們現在對于類的訪問只有兩個選擇:“友好的”或者public。若不愿其他任何人訪問那個類,可將所有構建器設為private,這樣除你之外,沒有可以用類創建的了。而你可以使用static成員創建對象。
package com.access.external;
class Soup{
private Soup(){//構造函數聲明為private,其它類不能用此構造函數創建對象;
System.out.println("sffewe");
}
public static Soup makSoup(){//其它類可通過makSoup來創建對象;
return new Soup();
}
private static Soup ps1 = new Soup();//自己創建對象;
public static Soup access(){//返回對象的引用。
return ps1;
}
public void f(){}
}
class Sandwich{
void f(){
new Lunch();
}
}
public class Lunch {
void test(){
//Soup priv1 = new Soup();
Soup priv2 = Soup.makSoup();
Sandwich f1 = new Sandwich();
Soup.access().f();//不創建對象,但通過Soup中返回的對象引用調用其方法。
}
}
該方法返回一個句柄,它指向類Soup的一個對象。
Soup類向我們展示出如何通過將所有構建器都設為private,從而防止直接創建一個類。請記住,假若不明確地至少創建一個構建器,就會自動創建默認構建器(沒有自變量)。若自己編寫默認構建器,它就不會自動創建。把它變成private后,就沒人能為那個類創建一個對象。但別人怎樣使用這個類呢?上面的例子為我們揭示出了兩個選擇。第一個選擇,我們可創建一個static方法,再通過它創建一個新的Soup,然后返回指向它的一個句柄。如果想在返回之前對Soup進行一些額外的操作,或者想了解準備創建多少個Soup對象(可能是為了限制它們的個數),這種方案無疑是特別有用的。
第二個選擇是采用“設計方案”(Design Pattern)技術,本書后面會對此進行詳細介紹。通常方案叫作“獨子”,因為它僅允許創建一個對象。類Soup的對象被創建成Soup的一個static private成員,所以有一個而且只能有一個。除非通過public方法access(),否則根本無法訪問它。
posted on 2007-12-20 11:09
仰望者 閱讀(248)
評論(0) 編輯 收藏