跟der包学习java_day7「封装(Encapsulation)」
今日目标
- 理解封装的意义和作用
- 掌握访问修饰符(public、private、protected、默认)的用法
- 学会用
private隐藏属性,用getter/setter方法提供访问接口 - 理解
this关键字的作用
一、为什么需要封装?
先看一个没有封装的例子:
public class Person {String name;int age; // 年龄是公开的,外部可以直接修改
}// 测试类
public class TestPerson {public static void main(String[] args) {Person p = new Person();p.age = -20; // 年龄被设置为负数,这在现实中是不合理的!System.out.println("年龄:" + p.age); // 输出:-20}
}
问题在于:外部可以直接修改age属性,甚至设置不合理的值(如负数),导致数据不安全。
封装的解决思路:
- 将属性隐藏起来(不让外部直接访问)。
- 提供公共方法,控制对属性的访问(比如设置年龄时检查合法性)。
二、访问修饰符:控制访问权限
Java 通过访问修饰符来控制类、属性、方法的访问范围,共有 4 种:
| 修饰符 | 同一类中 | 同一包中 | 不同包的子类 | 不同包的非子类 | 常见用途 |
|---|---|---|---|---|---|
private | ✔️ | ❌ | ❌ | ❌ | 隐藏类的属性或内部方法 |
默认(不写) | ✔️ | ✔️ | ❌ | ❌ | 同包内可见的工具类 / 方法 |
protected | ✔️ | ✔️ | ✔️ | ❌ | 允许子类访问的属性 / 方法 |
public | ✔️ | ✔️ | ✔️ | ✔️ | 对外暴露的接口(类 / 方法) |
核心原则:属性通常用private隐藏,方法根据需要用public(对外暴露)或private(内部使用)。
三、封装的实现:private + getter/setter
1. 用private修饰属性(隐藏数据)
public class Person {private String name; // 私有属性,外部不能直接访问private int age; // 私有属性
}
此时,外部直接访问p.age会报错(编译不通过),达到了隐藏数据的目的。
2. 提供public的getter和setter方法(控制访问)
getter:获取属性值(命名格式:public 数据类型 get属性名())
