1. 程式人生 > >Java之成員訪問控制

Java之成員訪問控制

  • 前言

在介紹訪問控制之前,首先需要了解的是成員訪問指的是什麼。成員訪問是指的以下兩種操作:

  1. 一個類中的方法程式碼是否能夠訪問(呼叫)另一個類中的成員
  2. 一個類是否能夠繼承其父類的成員

本文將會介紹四種成員訪問許可權


  • 公共型別:public

公共型別使用public關鍵字修飾,當一個成員被修飾為public時,所有其他類,無論該類屬於那個包,均能夠訪問該成員,例:

test.java中:

package chapter03;

public class Test 
{
	public void method()
	{
		System.out.println("呼叫的方法為public型別");
	}
	
}

如上述例子中,Sample3_26中的main方法呼叫了包chapter03中的Test中的method方法。這是因為method方法被宣告為public。

對於繼承而言,規則為,如果父類的成員宣告為public,那麼無論這兩個類是否在同一個包中,該子類都能繼承其父類的成員。


  • 私有型別:private

        這裡將介紹成員被標識為私有型別後的含義與用法,並且在最後將介紹面向物件中的封裝及其優點。標識為私有型別的成員用 private關鍵字修飾,其不能被該成員所在類之外的任何類中的程式碼訪問。例如對程式碼Test稍做修改,改為 Private Test類,而程式碼 Sample3-26不變:


       編譯上述兩個原始碼檔案,並執行類 Sample3-26,編譯器報錯,如上圖所示。
       從圖可以看出,方法 method卻不能被呼叫。因為其被設為pivate型別,對該成員自己類之外的任何程式碼來說都是不可見的對於繼承而言,規則為如果父類的成員宣告為 private,子類在任何情況下都不能繼承該成員。


  • 預設型別(defaault)

        當一個成員前面沒有寫任何訪問限制修飾符時,其訪問許可權為預設型別。具有此訪問許可權的許可權,只對同一個包中的類是可見的,也就是說,在同一個包中,預設型別相當於public,而對包外相當於private。

只需將兩個類放到同一個包中,或將預設型別改為public型別,就可以解決問題。


  • 保護型別:protected

        標識為保護型別的成員用protected關鍵字修飾,其規則幾乎與預設型別幾乎一樣,當訪問該成員的類位於同一包內,則該型別的訪問許可權相當於public型別。只是有一點點區別,如訪問該成員的類位於包外,則只有通過繼承才能訪問該成員。下表列出了修飾符及其可見性:

可見性 public protected default private
對同一個類
對同一個包中的任何類
對包外所有非子類
對同一個包中的子類基於繼承訪問
對包外的子類基於繼承訪問

訪問修飾符不能用來修飾區域性變數,否則會導致編譯錯誤,而且區域性變數的作用域為區域性,也沒有必要。