Java中的訪問權限修飾符

概述

一般來說,在Java中存在4中訪問權限修飾符:public,protected,包訪問權限,private。特別需要注意,包訪問權限並沒有對應的符號表示。

默認包機制

關於默認包,這裏多說一句。包的創建要位於一個Java文件(即源文件)的第一行,如使用下面的語句進行聲明。

package com.thinkinginjava.chapter05

對於沒有顯示使用package關鍵字聲明包名的類文件,則採用Java默認包機制,即相同目錄下所有不具有明確package聲明的文件,都被視作是該目錄下默認包的一部分。

修飾類成員

1)public:該成員可以被任何類訪問。
2)protected:protected修飾的成員不僅可被派生類訪問,而且也可以被同一個包內的其他類訪問,即使這些類並不是這個類的子類。
3)包訪問權限:對於類的成員,倘若前面沒有任何權限修飾符,該成員默認就是包訪問權限。
4)private:除了包含該成員的類,其他任何類都無法訪問該成員,private方法被自動認爲是final方法。
看下錶可能對訪問權限修飾符控制的訪問範圍更清晰。
在這裏插入圖片描述

示例

假設有2個文件c1.java,c2.java,他們在不同的包中,而c1(public修飾)有一個包訪問權限修飾的方法f1和public修飾的構造器。即使導入c1.java所在包,c2.java也無法使用f1,但是可以創建類c1的對象。
C1的定義如下

package Ch3;

public class C1 {
	public C1()
	{
		System.out.println("C1的構造函數");
	}
	String f(String info){
		return "C1 f方法"+info;
	}
	
	public void info(){System.out.println("C1 可以使用");}
}

C2的定義如下

package Ch4;
import Ch3.C1;
public class C2 {

	public static void main(String[] args) {
		C1 c1In = new C1();
		// c1In.f(); // 無法訪問f方法,因爲是包訪問權限,而且在不同包中
		c1In.info();
	}
}

如果將c1也改爲包訪問權限,即class之前沒有修飾符,則連創建類c1的對象都不可以。或者將構造器改爲包訪問權限,那麼也無法創建類c1的對象。

修飾類

前面所說的是用來控制類成員的訪問權限,包括成員變量和成員函數等。而控制類的訪問權限僅有2個修飾符,分別是包訪問權限和public修飾符。但是對於內部類,情況有些許不同。內部類可以像成員變量和成員方法一樣使用private、包訪問權限、protected、public等權限修飾符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章