好的阿杰 👍
我来给你写一份 Java 封装(Encapsulation)详解,用通俗易懂的语言帮你彻底搞懂。


🟦 Java 封装(Encapsulation)详解

1️⃣ 什么是封装?

封装就是把对象的“数据(属性)”和“操作(方法)”捆绑在一起,并对外隐藏内部实现细节,只暴露必要的接口。

👉 通俗理解:

  • 生活类比:你用手机打电话,但不需要知道手机内部的电路怎么运作,这就是封装。
  • 编程目的:保护数据安全 + 提高代码可维护性。

2️⃣ 封装的核心思想

  • 属性私有化:用 private 修饰成员变量,外部无法直接访问。
  • 提供公共方法(getter/setter):让外部安全访问或修改属性。

3️⃣ 封装的基本实现

public class Person {
    // 私有属性
    private String name;
    private int age;

    // 公共 Getter 和 Setter
    public String getName() {
        return name;
    }
    public void setName(String name) {
        // 可以在这里加校验
        if (name != null && !name.isEmpty()) {
            this.name = name;
        }
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age >= 0 && age <= 150) {  // 简单校验
            this.age = age;
        }
    }
}

使用:

public class TestEncapsulation {
    public static void main(String[] args) {
        Person p = new Person();
        p.setName("阿杰");
        p.setAge(25);

        System.out.println(p.getName()); // 阿杰
        System.out.println(p.getAge());  // 25
    }
}


4️⃣ 封装的访问修饰符

Java 提供了 4 种 访问控制符,用来控制封装的“可见性”:

修饰符类内同包子类外部
private
default(无修饰符)
protected
public

👉 口诀:越私有越安全,越公开越灵活


5️⃣ 封装的好处

  1. 提高安全性:防止外部随意修改对象的核心数据。
  2. 隐藏实现细节:调用者只关心接口,不需要知道内部逻辑。
  3. 增强可维护性:如果内部实现改动,外部调用方式不变。
  4. 便于数据校验:可以在 setter 方法里做逻辑判断。

6️⃣ 实际应用场景

  • 用户信息:如密码、身份证号等,必须私有化,避免直接修改。
  • 银行系统:余额不能直接操作,必须通过转账、存取款等方法来修改。
  • 框架/库设计:隐藏底层复杂实现,只暴露易用的 API。

7️⃣ 进阶:Lombok 简化封装

在实际开发中,getter/setter 写多了会很冗余,可以用 Lombok 自动生成:

import lombok.Data;

@Data
public class Person {
    private String name;
    private int age;
}

👉 @Data 注解会自动生成 getter/setter/toString/hashCode/equals 等方法。


📝 总结

  • 封装 = 数据隐藏 + 方法暴露
  • 实现方式:属性私有化(private)+ 公共方法(getter/setter)。
  • 好处:安全、简洁、易维护、便于扩展。
  • 实际应用:各种实体类(User、Account、Order)几乎都用到封装。