Java中public、protected、package-private和private的区别
技术背景
在Java编程中,访问修饰符(access modifiers)是实现封装和信息隐藏的重要工具。封装是面向对象编程的四大特性之一,它可以将数据和操作数据的方法绑定在一起,并对外部隐藏对象的内部实现细节,从而提高代码的安全性和可维护性。Java提供了四种访问修饰符:public
、protected
、package-private
(默认,无修饰符)和private
,它们分别用于控制类、方法、字段等的访问权限。
实现步骤
1. 明确访问修饰符的权限范围
以下表格总结了不同访问修饰符的访问权限:
修饰符 | 同一类中 | 同一包中 | 不同包的子类 | 不同包的非子类 |
---|---|---|---|---|
public | ✔️ | ✔️ | ✔️ | ✔️ |
protected | ✔️ | ✔️ | ✔️ | ❌ |
package-private(无修饰符) | ✔️ | ✔️ | ❌ | ❌ |
private | ✔️ | ❌ | ❌ | ❌ |
2. 根据需求选择合适的访问修饰符
- private:当某个成员(字段、方法、构造函数等)只在类的内部使用,不希望被外部访问时,使用
private
修饰符。这样可以确保类的内部实现细节对外部隐藏,提高代码的安全性和可维护性。 - package-private:如果某个成员只需要在同一个包内的其他类中访问,而不希望被其他包的类访问,可以不使用任何修饰符,即采用默认的
package-private
访问级别。 - protected:当某个成员需要在同一个包内的其他类中访问,并且还允许不同包的子类访问时,使用
protected
修饰符。 - public:如果某个成员需要被所有类访问,无论这些类是否在同一个包中,都可以使用
public
修饰符。
核心代码
以下是不同访问修饰符的使用示例:
// 定义一个父类
package fatherpackage;
public class Father {
// private字段,只能在类内部访问
private int privateField = 1;
// package-private字段,同一包内的类可以访问
int packagePrivateField