封装是面向对象编程的三大特性之一
为什么需要封装?
它把类的内部数据结构和业务逻辑 “封装” 起来,防止外部代码随意篡改,提升代码安全性;同时降低不同模块间的耦合度,一处代码修改,不至于牵一发而动全身,让代码维护与拓展都更加轻松。
private 关键字:
在 Java 中,private 是访问修饰符,用于限制成员变量和方法只能在所属类内部被访问。示例如下:
public class Phone {
private double price;
public Phone(double p) {
this.price = p;
}
}
上述代码定义了 Phone
类,其中 price
变量被设为 private。这意味着除了 Phonet
类自身的方法,其他类无法直接访问 price
,像这样的代码就是非法的:
public class Main {
public static void main(String[] args) {
BankAccount myAccount = new BankAccount(1000.0);
// 错误示范,无法访问私有成员
System.out.println(myAccount.balance);
}
}
编译器会报错,阻止这种越界访问,从而保护数据完整性。设想没有 private 修饰,任何外部类都能肆意修改,安全性荡然无存。
get、set 方法:受控的数据通道
private 把数据捂得太严实,外部代码完全无法操作也不行,这时 get、set 方法就登场了。get 方法用于获取私有成员变量的值,set 方法则用来设置其值,遵循命名规范,一般 get
后接成员变量名(首字母大写),set
同理。
public class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
public double getBalance() {
return balance;
}
public void setBalance(double newBalance) {
if (newBalance >= 0) {
this.balance = newBalance;
}
}
}
这里的 getBalance
让外部能安全获取账户余额,setBalance
方法额外加了条件判断,确保余额不能被设为负数,维持业务合理性。外部代码使用起来就很清晰:
public class Main {
public static void main(String[] args) {
BankAccount myAccount = new BankAccount(1000.0);
System.out.println("当前余额: " + myAccount.getBalance());
myAccount.setBalance(1500.0);
System.out.println("更新后余额: " + myAccount.getBalance());
}
}
总结:
- private 关键字:作为访问修饰符,它限定成员变量与方法仅能在所属类内部访问,防止外部随意篡改数据,维持数据完整性,违规访问会触发编译器报错。
- get、set 方法:用于突破 private 的限制,安全地与私有成员交互。get 方法负责取值,set 方法用于赋值,还能按需添加校验逻辑,控制数据的合法范围。
- 封装的意义:封装旨在隐藏类的内部细节,提升代码安全性,降低模块间耦合度,利于代码维护与拓展。