java 如何实现封装
封装的概念
封装是面向对象编程的三大特性之一,指将对象的属性和行为(方法)隐藏起来,仅通过公开的接口与外界交互。通过封装可以提高代码的安全性、可维护性和复用性。
实现封装的方法
使用访问修饰符
Java 提供了 private、protected、public 和默认(无修饰符)四种访问修饰符来控制成员的可访问性:
private:仅当前类内部可访问,外部无法直接访问。protected:当前类、子类及同包类可访问。public:所有类均可访问。- 默认(无修饰符):同包类可访问。
public class Person {
private String name; // 私有属性,外部无法直接访问
private int age;
// 公开的getter方法提供读取权限
public String getName() {
return name;
}
// 公开的setter方法提供修改权限
public void setName(String name) {
this.name = name;
}
}
通过方法暴露操作
将属性设为 private,通过公共方法(如 getter 和 setter)控制对属性的访问和修改,可在方法中添加逻辑校验。
public void setAge(int age) {
if (age > 0 && age < 150) { // 添加校验逻辑
this.age = age;
} else {
throw new IllegalArgumentException("Invalid age");
}
}
隐藏实现细节
仅对外暴露必要的接口,内部复杂的实现逻辑对外不可见。例如,使用 private 方法辅助公共方法完成功能:
public class BankAccount {
private double balance;
public void deposit(double amount) {
validateAmount(amount); // 内部私有方法
balance += amount;
}
private void validateAmount(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("Amount must be positive");
}
}
}
封装的优点
- 安全性:防止外部直接修改敏感数据。
- 灵活性:内部逻辑变更不影响外部调用。
- 可维护性:通过方法集中管理属性,便于调试和扩展。
示例代码
public class Student {
private String id;
private double gpa;
// 通过公共方法控制访问
public String getId() {
return id;
}
public void setId(String id) {
if (id != null && !id.isEmpty()) {
this.id = id;
}
}
public double getGpa() {
return gpa;
}
public void setGpa(double gpa) {
if (gpa >= 0 && gpa <= 4.0) {
this.gpa = gpa;
}
}
}






