Java 访问修饰符详解:public、private、protected 与默认访问权限

更新时间:2024-05-13 11:34:07   人气:4937
在 Java 编程语言中,访问控制是一个关键的特性,它允许程序员定义类成员(如字段和方法)对其他类可见或可调用的程度。四种主要的访问修饰符分别是 public、private、protected 和无关键字声明时使用的包级私有。

1. **Public**:
- `public` 关键字提供最大的访问级别,意味着被其标记的方法或者属性可以在任何地方——无论是同一包内还是不同包之间,甚至是子类或是无关第三方类中都可以直接进行访问。

例如,
java

public class MyClass {
public String myField;

public void display() {
System.out.println(myField);
}
}

在此例中,无论从哪个其它类中,我们都能读取并修改 `myField` 的值,并且可以随意地调用 `display()` 方法。

2. **Private**:
- 相反,如果一个变量或方法使用了 `private` 修饰,则表示它是严格封装的,在外部无法直接访问。该成员只能在其所属类内部被访问。

下面示例展示了这一点:
java

class MyClass {
private int secretValue;

// 构造器用于初始化private字段
public MyClass(int value) {
this.secretValue = value;
}

// 提供getter以获取private字段的值
public int getSecretValue() {
return secretValue;
}
}

在这个例子中,尽管我们在外部不能直接改变或查看 `secretValue` ,但通过公共 getter 我们能在保持数据安全性的同时实现对其间接操作。

3. **Protected**:
- 当你将某个成员设置为 `protected` 权限的时候,这个成员对于当前所在包中的所有类以及位于任意位置的所有继承自此类的子类都是可用的。

举例来说:
java

package com.example.packageA;

public class ParentClass {
protected String parentData;

public void setData(String data){
this.parentData = data;
}
}

// 在另一个包下
package com.example.packageB;

import com.example.packageA.ParentClass;

public class ChildClass extends ParentClass {

public void printParentData(){
System.out.println(parentData); // 可以访问父类受保护的数据
}
}

这里虽然 `parentData` 对于不在同一个包下的代码是不可见的,但在派生出的 `ChildClass` 中却可以直接访问。

4. 包级私有 (Default Access):
- 如果没有指定任何访问修饰符,默认情况下成员具有“包级私有限定”。这意味着它们仅能被相同包内的其他类所访问,而在其他包则完全不可见。

总结起来,Java 使用这四个级别的访问控制来帮助开发者实施面向对象设计原则之一的信息隐藏,从而提高程序的安全性和健壮性。了解何时何地应用这些访问限定符是在编写高效而安全的 Java 应用过程中必不可少的一部分技能。