在Java编程语言中,类可以用public、protected或private关键字来指定访问权限。这三种访问权限有如下区别:

1. public访问权限:
使用public关键字表示该类的成员可以被任何其他类访问。对于public成员变量和成员函数,其他类可以直接访问和调用,不需要继承该类也可以使用。一般来说,public访问权限用于指定开放的API,能够方便其他开发人员使用。
2. protected访问权限:
使用protected关键字表示该类的成员可以被该类的子类和同一包中的其他类访问。使用protected访问权限的成员只能在本类和其子类中访问,在同一包中的其他类也可以访问该成员。使用protected访问权限能够实现类成员的限制和封装,并且也不会过度暴露使用细节。
3. private访问权限:
使用private关键字表示该类的成员只能被该类的成员访问。private访问权限被用于强制实现类的封装特性,使得除了改变私有成员的类之外,没有其他任何代码可以访问或修改私有成员。在类的内部和嵌套类中可以访问private成员,而在其他类中,private成员无法被访问。
总结来说,public、protected和private访问权限是三种不同的访问级别,可以根据需要选择合适的访问级别来限制和保护类的成员。这样可以实现更好的封装,让代码更加安全和可靠。
下面是示例代码演示三种访问权限之间的区别:
public class ExampleClass {
public int publicVar; // 公有成员变量
protected int protectedVar; // 受保护的成员变量
private int privateVar; // 私有成员变量
public ExampleClass() {
publicVar = 1;
protectedVar = 2;
privateVar = 3;
}
public void publicMethod() {
System.out.println("This is a public method");
}
protected void protectedMethod() {
System.out.println("This is a protected method");
}
private void privateMethod() {
System.out.println("This is a private method");
}
}
public class ChildClass extends ExampleClass {
public ChildClass() {
super();
}
// 覆盖父类的protected方法
@Override
protected void protectedMethod() {
System.out.println("This is a protected method in child class");
}
}
public class TestClass {
public static void main(String[] args) {
ExampleClass obj = new ExampleClass();
// 访问公有成员变量和成员方法
System.out.println(obj.publicVar);
obj.publicMethod();
// 访问受保护的成员变量和成员方法
obj.protectedVar = 10;
obj.protectedMethod();
// 私有成员无法在外部类中直接访问
// obj.privateVar = 20;
// obj.privateMethod();
ChildClass childObj = new ChildClass();
// 这里访问父类的受保护的成员变量和成员方法,因为ChildClass继承自ExampleClass,
// 所以ChildClass可以在自己的方法和构造函数中通过super关键字访问超类的受保护成员
childObj.protectedVar = 30;
childObj.protectedMethod();
}
}在上面的代码中,我们定义了一个ExampleClass,并将其中的成员分别声明为public、protected和private,然后创建了一个ChildClass作为ExampleClass的子类。在TestClass中,我们创建了一个ExampleClass的对象obj,并分别访问了ExampleClass中的public、protected和private成员,结果表明:公有成员变量和成员方法可以被其他类直接访问,受保护的成员变量和成员方法只能在继承类中或者和ExampleClass在同一包内的类中访问,而私有成员则只能在同一个类的成员函数中访问,无法被其他类直接访问。最后我们还创建了ChildClass类,并覆盖了ExampleClass中的protectedMethod方法,并通过super关键字访问了ExampleClass的受保护成员。
