Java 存取修飾符

Java 存取修飾符用於提供 Java 中的存取控制。Java 通過三個關鍵字提供存取控制 – privateprotectedpublic。我們不一定要始終使用這些存取修飾符,因此還有另一個稱為“默認存取”、“包私有”或“無修飾符”。

Java 存取修飾符

我們可以將 Java 存取修飾符與類和類變量以及方法一起使用。我們只允許使用“public”或“default”存取修飾符與 Java 類。

  1. 如果一個類是“public”,那麼我們可以從任何地方訪問它,即從任何其他位於任何其他包中的類訪問它等。
  2. 我們在源文件中只能有一個“public”類,文件名應該與公共類名相同。
  3. 如果類具有“default access”,則只能從同一包中的其他類訪問它。

Java 類成員的存取修飾符

我們可以對類成員變量和方法使用所有四個訪問修飾符。然而,在類級別訪問規則之後應用成員訪問修飾符規則。例如,如果一個類具有默認訪問權限,那麼它將在其他包中不可見,因此該類的方法和變量也將不可見。我們將分別查看每個修飾符,然後我們將通過一個簡單的程序展示Java訪問修飾符的使用。

Java訪問修飾符- public關鍵字

如果類成員是“public”,那麼它可以從任何地方訪問。成員變量或方法是全局訪問的。這是提供對類成員訪問的最簡單方法。但是,我們應該注意在類變量中使用此關鍵字,否則任何人都可以更改值。通常,類變量被保持為私有,並提供getter-setter方法來操作它們。

Java訪問修飾符- private關鍵字

如果一个类成员是“private”,那么它只能在同一个类内部访问。这是最受限制的访问,类成员对外部世界不可见。通常,我们将类变量设为私有,将仅在类内部使用的方法也设为私有。

Java访问修饰符 – protected关键字

如果类成员是“protected”,那么它只能被同一包中的类子类访问。这个修饰符比private更自由,但比public更受限制。通常,我们使用这个关键字确保类变量只能被子类访问。

Java访问修饰符 – 默认访问

如果一个类成员没有指定任何访问修饰符,则会被视为具有默认访问权限。访问规则与类相似,具有默认访问权限的类成员仅对同一包中的类可访问。这种访问权限比公共和受保护的权限更受限制,但比私有权限更宽松。 (最不可访问)private < default < protected < public(最可访问)下表总结了上述访问修饰符与同一包或其他包中的不同类以及子类相关的情况。 让我们编写一些简单的类,我们将在其中看到Java访问修饰符的使用。 TestA.java

package com.journaldev.access;

class TestA {

	public void methodPublic(){
		methodPrivate();
	}
	
	protected void methodProtected(){
		methodPrivate();
	}
	
	void methodDefault(){
		methodPrivate();
	}
	
	private void methodPrivate(){}
}

请注意,TestA类具有默认访问权限,并且私有类方法对同一类的所有其他部分都可访问。 TestB.java


package com.journaldev.access;

import com.journaldev.access.TestA;

public class TestB {

	public static void main(String args[]) {
		new TestA().methodPublic();
		new TestA().methodProtected();
		new TestA().methodDefault();

	}

	public void methodPublic() {

	}

	protected void methodProtected() {

	}

	void methodDefault() {

	}

	private void methodPrivate() {
	}

}

请注意,TestB与TestA类位于同一包中,因此它能够访问它的类成员。由于在同一包中,私有成员不可访问,但所有其他成员都可访问。 TestC.java


package com.journaldev.access.child;

import com.journaldev.access.TestB;

public class TestC {

	public static void main(String[] args) {
		new TestB().methodPublic();
	}

}

TestB类是可访问的,因为它是公共的。只有TestB类的公共成员可访问,因为TestC类既不在同一包中,也不是TestB的子类。 TestE.java


package com.journaldev.util;

import com.journaldev.access.TestB;

public class TestE extends TestB {

	public static void main(String[] args) {
		new TestB().methodPublic();
		new TestB().methodProtected(); // compile time error

		// 正常工作,使用子类访问超类受保护方法
		new TestE().methodProtected();

	}

}

由於 TestE 類別是 TestB 的子類別,我們可以通過子類別 TestE 訪問 TestB 的受保護成員。如果我們嘗試直接訪問超類別的受保護方法,將會收到編譯時錯誤。這就是關於 Java 訪問修飾符的全部內容,很容易理解。只是不要將默認訪問和受保護訪問弄混。一個易於記憶的方法是,默認訪問比受保護訪問更受限制,而受保護成員在子類別中是可訪問的。最近我製作了一個視頻詳細解釋 Java 訪問修飾符,你可以在下面的 YouTube 上觀看它。 https://www.youtube.com/watch?v=QKjnbC3UBtY

Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers