一句话总结:
继承是“子承父业”,封装是“黑箱操作”,多态是“千人千面”——面向对象三大法宝,让代码更灵活、更安全、更好复用!
一、继承(Inheritance)——子承父业
比喻:儿子继承老爸的财产(属性和方法),还能自己创业(扩展新功能)。
怎么用?
// 老爸类(基类)  
class Father {  
    String surname = "张";  
    void drive() {  
        System.out.println("开五菱宏光");  
    }  
}  
// 儿子类(子类)继承老爸  
class Son extends Father {  
    // 继承 surname 和 drive()  
    void playGame() {  
        System.out.println("打王者农药"); // 扩展新方法  
    }  
}  
public static void main(String[] args) {  
    Son son = new Son();  
    son.drive();     // 输出:开五菱宏光(继承来的)  
    son.playGame();  // 输出:打王者农药(自己新增的)  
}  
核心作用:
- 代码复用:不用重复写老爸的代码。
- 层次化设计:父子类形成树状结构(如动物 → 猫 → 布偶猫)。
注意!
- 不要滥用继承:比如“苹果”继承“水果”合理,但“苹果”继承“卡车”就离谱!
- Java是单继承:一个类只能有一个亲爹(用接口实现多继承效果)。
二、封装(Encapsulation)——黑箱操作
比喻:像用微波炉——你只管按键,不用知道内部怎么加热。
怎么用?
- 用 private保护字段:外部不能直接修改。
- 用 getter/setter控制访问:加验证逻辑,比如年龄不能为负数。
class BankAccount {  
    private double balance; // 余额私有化  
    // 通过方法操作余额  
    public void deposit(double money) {  
        if (money > 0) {  
            balance += money;  
        }  
    }  
    public double getBalance() {  
        return balance;  
    }  
}  
public static void main(String[] args) {  
    BankAccount account = new BankAccount();  
    account.deposit(1000);  
    // account.balance = -9999;  // 报错!不能直接访问  
    System.out.println(account.getBalance());  
}  
核心作用:
- 数据安全:防止外部随意篡改(比如余额不能直接设负数)。
- 隐藏复杂度:使用者只需关注方法,不用关心内部实现。
三、多态(Polymorphism)——千人千面
比喻:同一个“叫”的方法,猫是“喵”,狗是“汪”——具体表现看对象类型。
实现方式:
- 继承 + 方法重写:子类重写父类方法。
- 接口 + 实现类:不同类实现同一接口。
代码示例:
// 父类 Animal  
class Animal {  
    void shout() {  
        System.out.println("叫");  
    }  
}  
// 子类重写方法  
class Cat extends Animal {  
    @Override  
    void shout() {  
        System.out.println("喵~");  
    }  
}  
class Dog extends Animal {  
    @Override  
    void shout() {  
        System.out.println("汪!");  
    }  
}  
public static void main(String[] args) {  
    Animal a1 = new Cat();  // 父类引用指向子类对象  
    Animal a2 = new Dog();  
    a1.shout(); // 输出:喵~  
    a2.shout(); // 输出:汪!  
}  
核心作用:
- 代码扩展性:新增动物类型(如鸭子)不用改原有代码。
- 统一接口:用父类类型处理不同子类对象(如遍历动物数组统一调用 shout())。
三大特性总结表
| 特性 | 比喻 | 核心思想 | 应用场景 | 
|---|---|---|---|
| 继承 | 子承父业 | 代码复用,层次化设计 | 扩展已有类(如猫继承动物) | 
| 封装 | 黑箱操作 | 隐藏细节,保护数据 | 保护敏感数据(如银行余额) | 
| 多态 | 千人千面 | 同一方法不同实现 | 统一处理不同子类对象 | 
常见坑点!
- 
继承滥用: - 错误:为了复用代码,让不相关的类强行继承。
- 正确:优先用组合(把类作为成员变量)替代继承。
 
- 
封装失效: - 错误:用 public暴露字段,允许直接修改。
- 正确:字段尽量 private,通过方法控制访问。
 
- 错误:用 
- 
多态误解: - 错误:认为 Animal a = new Cat();后,a 能直接调用 Cat 独有的方法(如catchMouse())。
- 正确:需要强制类型转换:((Cat)a).catchMouse();(先检查类型)。
 
- 错误:认为 
总结口诀:
“封装藏细节,继承省代码。
多态玩花样,对象变魔术。
三大特性配合好,面向对象真奇妙!”