Java访问修饰符

在Java中,访问修饰符用于提供对Java的访问控制。Java通过三个关键字(private、protected和public)提供访问控制。我们并非总是必须使用这些访问修饰符,因此还有一种称为“默认访问”、“包私有”或“无修饰符”的修饰符可供使用。

Java 访问修饰符

我们可以使用Java访问修饰符来控制类、类变量和方法的访问权限。对于Java类,我们只允许使用“public”或“default”访问修饰符。

    1. 如果一个类是“公开的”,那么我们可以从任何地方访问它,即从任何位于其他包中的其他类中访问它等等。

 

    1. 我们在源文件中只能有一个“公开的”类,文件名应与公开类的名称相同。

 

    如果一个类具有“默认访问权限”,那么它只能从同一包中的其他类中访问。

Java 类成员的访问修饰符

在类成员变量和方法中,我们可以拥有四种访问修饰符。然而,成员访问修饰符规则会在类级别访问规则之后应用。例如,如果一个类具有默认访问权限,则在其他包中将无法看到该类,因此该类的方法和变量也将不可见。我们将分别研究每一种修饰符,然后以一个简单的程序展示Java访问修饰符的用法。

Java访问修饰符 – 公共关键字

如果一个类成员是 “public”,那么它可以从任何地方访问。该成员变量或方法可以全局访问。这是提供对类成员访问的最简单方法。然而,我们应该小心使用这个关键字与类变量,否则任何人都可以改变这些值。通常,类变量被保存为私有的,并提供了getter-setter方法来操作它们。

Java 访问修饰符 – private 关键字

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

Java访问修饰符 – protected关键字

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

Java 访问修饰符 – 默认访问

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

package com.Olivia.access;

class TestA {

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

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


package com.Olivia.access;

import com.Olivia.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.Olivia.access.child;

import com.Olivia.access.TestB;

public class TestC {

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

}

由于TestB类是public的,所以可以访问它。只有TestB类的public成员可以被访问,因为TestC类不在同一个包中,也不是TestB的子类。TestE.java。


package com.Olivia.util;

import com.Olivia.access.TestB;

public class TestE extends TestB {

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

		// works, accessing super class protected method using subclass
		new TestE().methodProtected();

	}

}

由于TestE类是TestB类的子类,我们可以通过子类TestE访问TestB的protected成员。如果我们尝试直接访问超类的protected方法,将会得到一个编译时错误。这就是关于Java访问修饰符的所有内容,很容易理解。只是不要将默认访问和protected访问弄混。一个简单的记忆方法是,默认访问比protected访问更受限制,而protected成员在子类中是可以访问的。最近,我制作了一个详细解释Java访问修饰符的视频,你可以在下方的YouTube链接中观看。https://www.youtube.com/watch?v=QKjnbC3UBtY

发表回复 0

Your email address will not be published. Required fields are marked *