问题的历史:
在Java中引入数据和方法的访问级别控制是为了实现封装和保护类的内部结构。这是面向对象编程的重要组成部分,有助于隐藏实现并防止未经授权的对象状态更改。
问题:
不同的访问修饰符——public、protected、(package-private)、private——以不同方式限制类成员的可见性,这往往不易察觉。选择不当的访问级别可能导致错误、权限扩展和封装破坏。
解决方案:
为每个字段或方法使用最小必要的访问修饰符。Java支持:
代码示例:
public class Dog { private String name; // 仅在Dog内部可见 String breed; // package-private protected int age; // 在包内及子类中可见 public void bark() { // 在任何代码中可用 System.out.println("Woof!"); } }
关键特征:
内部类(inner class)是否可以访问外部类的所有private字段?
是的,内部类可以完全访问外部类的所有字段和方法,包括private字段。反之,外部类可以通过拥有内部类的实例访问内部类的private成员。
protected类成员是否可以在没有继承的情况下在包外被访问?
不可以。protected在包外仅对继承者方便。仅通过另一个包中的类对象无法访问。
如果类未声明为public,但从另一个包导入,会发生什么?
具有package-private级别的类不能被导入并在其包外显式使用。从另一个包的代码尝试访问它将导致编译错误。
负面案例
所有DTO类的字段都标记为public,以简化访问。
优点:
缺点:
积极案例
使用private字段和public访问方法。
优点:
缺点: