Java中的访问修饰符定义了变量,方法,构造函数或类的可访问性(范围)。
Java中有4种访问修饰符:
- Public
- Private
- Protected
- Default
你不必明确地使用默认修饰符。如果您不提供Public,Private和Protected,则JVM将使用默认修饰符。
Public修饰符
Public修饰符表示任意Java类都可以访问。如果您将类设置为public,那意味着该类在任何地方都可用。
让我们来看看以下例子:
- 在org下创建一个名叫A.java的类
package org;
public class A {
public int a;
public A(int a) {
this.a = a;
}
public void methodA() {
System.out.println("In method of class A");
}
}
- 在org下创建一个名叫B.java的类
package org;
import org.A;
public class B {
public static void main(String args[]) {
A objA = new A(30);
objA.methodA();
System.out.println("Value of variable a is: " + objA.a);
}
}
当你运行上面程序时,你将会得到以下输出结果:
In method of class A
Value of variable a is: 30
Private修饰符
Private访问修饰符只能在类内部访问。
除非嵌套类,否则不能使用private和protected类。
让我们通过一个例子来理解它:
package org;
public class A {
private int a;
public A(int a) {
this.a = a;
}
private void methodA() {
System.out.println("In method of class A");
}
}
public class B {
public static void main(String args[]) {
A objA = new A(30);
objA.methodA(); // 第20行
System.out.println("Value of variable a is: " + objA.a); // 第21行
}
}
你将在第20和21行得到编译错误,因为类B无法访问类A的私有变量或方法。
默认修饰符
如果你不设置任何访问权限,则JVM将其视为默认访问权限。如果使用默认访问修饰符,则当前类包之外的类将无法访该类的方法,变量或该类。
- 在org中创建一个名为DefaultAccess.java的类
package org;
public class DefaultAccess {
int a;
public DefaultAccess(int a) {
this.a = a;
}
void methodA() {
System.out.println("In method of class A");
}
}
- 在com中创建一个名为B.java的类
package com;
import org.DefaultAccess;
public class B {
public static void main(String args[]) {
DefaultAccess obj = new DefaultAccess(20);
obj.methodA(); //第9行
System.out.println("Value of variable a is: " + obj.a); //第10行
}
}
在上面类B中,你将在第9行和第10行得到编译错误,因为我们试图在包“org”之外访问类DefaultAccess的变量a和方法methodA.
Protected修饰符
Protected访问修饰符只能通过继承在同一个包中或包之外访问。
让我们通过一个例子来理解它:
- 在com中创建一个名为ProtectA.java的类
package com;
public class ProtectA {
protected int a;
protected ProtectA(int a){
this.a=a;
}
protected void methodA() {
System.out.println("In method of class A");
}
}
- 在org中创建一个名为ProtectB.java的类
package org;
import com.ProtectA;
public class ProtectB extends ProtectA {
ProtectB(int a) {
super(a);
}
public static void main(String args[]) {
ProtectB objB = new ProtectB(20);
objB.methodA();
System.out.println("Value of variable a is: " + objB.a);
}
}
当你运行上面程序时,你将会得到以下输出结果:
In method of class A
Value of variable a is: 20
正如你所看到的,我们可以通过继承访问ProtectA的变量a和methodA。
网友评论