對於類:預設的:可以在同一個包中的其它類中被訪問,在同一個包中被其它的類所繼承。public:可以在任何一個包中的任何一個類中被訪問和繼承。//--------------------------------------------------------------------------------------------------------------------一個類作為整體對程式的其它部分可見,並不能代表類內的所有的域和方法也對程式的其它部分可見,前者是後者的必要條件,類的域和方法能否為其它所有類訪問(含繼承),還要看這些域和方法自己的存取控制符。//---------------------------------------------------------------------------------------------------------------------如果一個類的構造方法聲明為private,則其它類不能產生該類的一個執行個體。//---------------------------------------------------------------------------------------------------------------------處在不同包中的子類雖然可以訪問父類中限定為protected的成員,但訪問這些成員的對象必須具有子類的類型或者子類的子類的類型,而不能是父類類型。//---------------------------------------------------------------------------------------------------------------------
|
同一個類中 |
同一個包中 |
不同包中的子類 |
不同包中的非子類 |
private |
允許 |
|
|
|
預設 |
允許 |
允許(子類和非子類) |
|
|
protected |
允許 |
允許(子類和非子類) |
允許(僅子類,且無法通過子類的執行個體訪問子類繼承的protected方法) |
無法訪問protedted方法 |
public |
允許 |
允許(子類和非子類) |
允許 |
允許(子類和非子類) |
對於類成員://---------------------------------------------------------------------------------------------------------------------子類可以繼承父類中存取權限設定為public,protected的”預設的”的域變數及方法,但是不能繼承存取權限為private的域變數和方法。//---------------------------不能同時使用的存取修飾詞和非存取修飾詞:abstract與final不能同時修飾同一個類;abstract與private,static,final或native不能並列修飾同一個方法;abstract類中不能的private修飾的域和方法;abstract 方法必須存在於abstract類中;static 方法中不能處理非static的域。範例程式碼:package pkg1;
public class Country
{
protected String name;
protected void value()//friendly
{
name="China";
}
}//------------------------package pkg2;
import pkg1.Country;
public class Main6
{
public static void main(String[]args)
{
Country c=new Country();
//c.value();//錯誤
}
}
//子類可以繼承父類中存取權限設定為public,protedted和friedly(預設的)的
//域變數和方法,但是不能繼承存取權限設定為private的域變數和方法
class City extends Country
{
void setValue()
{
this.value();//正確
super.value();//正確
Country c=new Country();
//c.value();//錯誤:即訪問protected成員的物件類型不能是父類類型
City cc=new City();
cc.value();//正確
}
}