Java提供了public, private, protected 三個訪問權限修飾詞,提供了以下四種訪問權限控制機制:
1、包訪問權限;
2、Public訪問權限;
3、Private訪問權限;
4、Protected訪問權限;
1、包訪問權限
包訪問權限是Java為了便於程序員開發而給定的一種權限選擇。
當方法或域未給定訪問權限限制符時,其默認具有該權限。具有該權限的方法和域成員,在包內是完全可見的(注意要與其對象依附在一起),而包外則不可見。
這有點類似於C++中友元類,友元類見彼此可見,以簡化訪問。
E:
Package accesscontrol
//Animal.java
public class Animal
{
void bark()
}
Package accesscontrol
//Test.java
public class Test
{
main()
{
Animal a= new Animal();
a.bark();//此處直接訪問了Animal類中的bark()方法
}
}
由於Animal類和Test類都被打包在了同一個Package下,Animal中的bark()方法為包訪問權限,故對類Test可見。
對java文件中的類也是如此,若未指定限制符,其默認為包訪問權限,只能在包內被使用。包外是無法利用其生成對象的(不可見)。
注意:當決定一個類對包外可見的時候,除了要將類得訪問限定符改為public意外,自定義的構造器限定符也必須修改為public,不然將導致外部不可見。
2、public 權限
當在方法或域前面顯式的給定public限定符的時候,其具有該權限控制。
public權限是最為寬松的一種權限控制,對包的內、外部都是完全可見的。
java最多只允許一個java文件中出現一個public類(該類向外提供接口,並與該java文件的名稱完全一致)。
當一個java文件中無一個Public類時,表明其僅供包內使用,對外界不可見!
注意:類只有包訪問權限和public訪問權限兩類。
3、Private訪問權限
Private是訪問限定最為嚴格一種權限。
當方法或域為private權限時,表明其只針對該類的內部可見,類的外部(包括同一包內的其它類)是不可見的。
//Animal.java
public class Animal
{
private void bark()
}
Package accesscontrol
//Test.java
public class Test
{
main()
{
Animal a= new Animal();
a.bark();//此處將造成編譯錯誤,bark()方法為private方法,僅對Animal類 內部可見,現在在Test類內部。
}
}
4、protected訪問權限
protected權限是一種嚴格程度介於public和private之間的權限,具有prtoected權限的域和方法只能對其自身和導出類可見。
在面向對象的設計當中,最常用的為public和private訪問權限兩種。
一般情況下將域定義為private,將方法定義為public。外界使用該類時,通過public方法使用其接口,而具體的域成員則對外部屏蔽,只能通過類提供的接口間接訪問。
Example:
public class Dog
{
private int age=0;
public setAge(int num)
{
age=num+1;
}
}
此處,age域對外部不可見,要想對其進行操作,必須使用Dog類提供的接口setAge(int num)。
注意到setAge的方法體age=num+1;對用戶給出的年齡加1了以后再修改了age屬性,這種修改對使用者是不可見的,有時又是非常的必要的!