在Java中,使用访问修饰符来控制对字段、方法和类的访问:private、default(包私有)、protected、public。
问题的背景:
早期版本的Java使用严格的对象封装。为了灵活性,引入了不同的访问级别以支持完全封闭性和扩展性(继承和包内访问)。
问题:
不正确的修饰符选择可能会导致封装破坏、继承问题、无法测试,甚至是安全漏洞,如果数据错误地变为公共可访问。
解决方案:
使用最严格的修饰符,符合您的架构。字段通常设置为private,通过getter/setter提供访问。只有当方法是API的一部分时才设置为public,而对于扩展,应设置为protected。
代码示例:
public class Person { private String name; // 私有字段 protected int age; // 在包和子类中可访问 String email; // 包私有 public String getName() { return name; } }
关键特点:
private — 仅在类内部可访问protected — 额外允许其他包中的子类访问public — 对所有人可访问可以对局部变量应用访问修饰符吗?
不可以。访问修饰符仅应用于类、方法和字段/内部类,而不适用于局部变量。
可以在方法内部创建带有public修饰符的类吗?
不可以。局部类不能声明访问修饰符,它总是具有方法内部的可见性。
protected成员在其他包中的子类中可访问吗?
可以,protected成员可以被子类访问,即使它们位于其他包中,但普通类在其他包中不可访问。
类的所有字段偶然声明为public — 其他类直接访问,难以追踪更改位置。
优点:
缺点:
所有字段都是private,公共方法控制带有验证的访问,仅将需要的部分设置为protected以便于子类扩展。
优点:
缺点: