封装是面向对象编程的三大特性之一(封装、继承、多态),它可以帮助我们保护数据安全,提高代码的可维护性。
什么是封装?
封装是指将数据(属性)和行为(方法)包装在一个类中,并对外隐藏实现的细节。简单来说就是:
把属性设为私有(private)
提供公共(public)的方法来访问和修改这些属性
为什么要封装?
保护数据安全:防止外部直接访问和修改内部数据
隐藏实现细节:外部只需要知道"做什么",不需要知道"怎么做"
便于维护:内部实现可以改变而不影响外部调用
增加代码灵活性:可以在方法中添加额外的逻辑(如验证)
封装的实现方式
1. 使用private修饰属性
public class Person {
private String name;
private int age;
}
2. 提供public的getter和setter方法
public class Person {
private String name;
private int age;
// getter方法
public String getName() {
return name;
}
// setter方法
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
// 可以在setter中添加验证逻辑
if(age > 0 && age < 150) {
this.age = age;
} else {
System.out.println("年龄不合法");
}
}
}
封装的实际应用示例
public class BankAccount {
private String accountNumber;
private double balance;
public BankAccount(String accountNumber) {
this.accountNumber = accountNumber;
this.balance = 0.0;
}
public void deposit(double amount) {
if(amount > 0) {
balance += amount;
System.out.println("存款成功,当前余额: " + balance);
} else {
System.out.println("存款金额必须大于0");
}
}
public void withdraw(double amount) {
if(amount > 0 && amount <= balance) {
balance -= amount;
System.out.println("取款成功,当前余额: " + balance);
} else {
System.out.println("取款失败,余额不足或金额不合法");
}
}
public double getBalance() {
return balance;
}
public String getAccountNumber() {
return accountNumber;
}
}
封装的好处
安全性:外部无法直接修改balance,必须通过deposit和withdraw方法
可控性:可以在方法中添加业务逻辑(如金额验证)
灵活性:内部实现可以改变而不影响外部调用
总结
封装是Java编程的基础概念,通过:
将属性设为private
提供public的getter和setter方法
在方法中添加必要的业务逻辑
这样可以构建更安全、更健壮的Java程序。记住:好的封装是优秀Java代码的开始!