封装的定义
封装是面向对象编程的三大特性之一(其他两个是继承和多态),它是指将对象的状态(属性)和行为(方法)包装在一个单元中,并对外隐藏内部实现细节。在Java中,封装主要通过类来实现,通过访问控制修饰符来管理对类成员的访问权限。
封装的意义
- 数据保护:封装可以防止外部代码直接访问对象内部数据,避免数据被意外修改或破坏
- 提高安全性:通过隐藏实现细节,封装可以防止敏感数据被外部直接访问
- 代码维护性:封装后的代码更容易修改和维护,因为内部实现的变化不会影响使用该类的代码
- 简化接口:用户只需要知道如何使用类提供的功能,而不需要了解其内部实现
- 增强灵活性:可以在不改变外部接口的情况下,自由修改内部实现
封装的实现
在Java中,主要通过以下方式实现封装:
-
访问修饰符:
private:仅在本类中可见default(无修饰符):同包可见protected:同包和子类可见public:所有类可见
-
Getter和Setter方法:
通过提供公共方法来访问和修改私有字段
public class Student {
// 私有字段
private String name;
private int age;
// 公共构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// Getter方法
public String getName() {
return name;
}
// Setter方法
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 < 120) {
this.age = age;
}
}
}
可以通过鼠标右键点击"Generate"选项,选择"Getter and Setter"功能来快速生成属性的获取/设置方法。在弹出的窗口中,选择需要操作的参数即可完成创建。
- 方法封装:
将复杂操作封装在方法中,只暴露简单的接口
public class BankAccount {
private double balance;
public void deposit(double amount) {
if(amount > 0) {
balance += amount;
System.out.println("存款成功");
} else {
System.out.println("存款金额必须大于0");
}
}
public void withdraw(double amount) {
if(amount > 0 && amount <= balance) {
balance -= amount;
System.out.println("取款成功");
} else {
System.out.println("取款失败,余额不足或金额无效");
}
}
public double getBalance() {
return balance;
}
}
- 包封装:
通过将相关类组织在同一个包中,实现更高层次的封装
在实际开发中,良好的封装实践可以帮助创建更加健壮、安全和易于维护的代码。
Java面向对象编程之封装特性

被折叠的 条评论
为什么被折叠?



