用生活场景+Java代码结合的案例,能更直观理解三大特征的实际用途!
一、封装:实体类的数据安全控制
生活场景:银行账户的余额,不能直接修改,只能通过存钱、取钱的正规操作变更。
代码案例:
// 账户类(封装属性,暴露安全方法)
class BankAccount {
// 私有属性,外部无法直接访问
private String accountNum;
private double balance;
// 构造器初始化
public BankAccount(String accountNum, double balance) {
this.accountNum = accountNum;
// 存款金额校验(封装的逻辑优势)
this.balance = balance > 0 ? balance : 0;
}
// getter方法:外部获取余额
public double getBalance() {
return balance;
}
// setter方法:外部通过存钱操作修改余额
public void deposit(double money) {
if (money > 0) {
balance += money;
System.out.println("存款成功,当前余额:" + balance);
} else {
System.out.println("存款金额必须大于0");
}
}
}
// 测试类
public class TestEncapsulation {
public static void main(String[] args) {
BankAccount account = new BankAccount("622202XXXX", 1000);
// 无法直接修改balance(编译报错)
// account.balance = 5000;
// 通过封装的方法操作
account.deposit(2000); // 输出:存款成功,当前余额:3000.0
account.deposit(-500); // 输出:存款金额必须大于0
}
}
二、继承:复用父类功能,扩展子类特性
生活场景:猫和狗都是动物,都有“吃饭”“叫”的共性,也有各自的专属行为(猫抓老鼠、狗看门)。
代码案例:
// 父类(提取共性)
class Animal {
String name;
public Animal(String name) {
this.name = name;
}
// 共性方法
public void eat() {
System.out.println(name + "在吃饭");
}
public void shout() {
System.out.println(name + "在叫");
}
}
// 子类继承父类,复用共性+扩展特性
class Cat extends Animal {
public Cat(String name) {
super(name); // 调用父类构造器
}
// 重写父类方法(适配子类特性)
@Override
public void shout() {
System.out.println(name + "喵喵叫");
}
// 子类专属方法
public void catchMouse() {
System.out.println(name + "在抓老鼠");
}
}
// 测试类
public class TestInheritance {
public static void main(String[] args) {
Cat tom = new Cat("汤姆");
tom.eat(); // 复用父类方法:汤姆在吃饭
tom.shout(); // 重写后方法:汤姆喵喵叫
tom.catchMouse(); // 子类专属:汤姆在抓老鼠
}
}
三、多态:同一行为,不同实现
生活场景:同样是“支付”行为,用微信支付、支付宝支付的流程不同,但用户只需调用“支付”动作即可。
代码案例:
// 父类/接口(定义统一行为)
interface Payment {
void pay(double money); // 统一支付方法
}
// 子类1:微信支付实现
class WeChatPay implements Payment {
@Override
public void pay(double money) {
System.out.println("微信支付" + money + "元,已扣除零钱余额");
}
}
// 子类2:支付宝支付实现
class Alipay implements Payment {
@Override
public void pay(double money) {
System.out.println("支付宝支付" + money + "元,已扣除余额宝金额");
}
}
// 测试类(多态核心:父类引用指向子类对象)
public class TestPolymorphism {
public static void main(String[] args) {
Payment pay1 = new WeChatPay();
Payment pay2 = new Alipay();
pay1.pay(100); // 输出:微信支付100.0元,已扣除零钱余额
pay2.pay(200); // 输出:支付宝支付200.0元,已扣除余额宝金额
}
}
要不要我帮你整理一份三大特征综合案例代码(含注释),把封装、继承、多态结合到一个完整场景中,方便你直接运行学习?