第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

Java多態(tài)特性,你真的懂了嗎?

標(biāo)簽:
Java JavaScript

Java多态特性,你真的懂了吗?

引子:那个让我"社死"的代码评审

还记得第一次代码评审时,我写了一堆 if-else 判断不同动物的叫声。团队 Leader 看了一眼就问:“你知道多态吗?”

当时我脸红得像猴屁股,心想:"多态不就是父类引用指向子类对象吗?"然后信心满满地回答。Leader 笑了笑说:“那你重构一下这段代码试试。”

结果我愣是用了半天时间,才明白多态的真正威力不只是概念背诵,而是解决问题的思维方式

探索:多态的三张面孔

第一张脸:方法重载(编译时多态)

方法重载就像是同名不同岗的员工,虽然都叫"张三",但干的活不一样:

public class Calculator {
    // 同一个方法名,不同参数 = 编译时就能确定调用哪个
    public int add(int a, int b) {
        return a + b;
    }
  
    public double add(double a, double b) {
        return a + b;
    }
  
    public String add(String a, String b) {
        return a + b; // 字符串拼接
    }
}

第二张脸:方法重写(运行时多态)

这才是多态的精髓所在!父类定义规范,子类各显神通:

abstract class Animal {
    // 定义统一接口
    public abstract void makeSound();
    public abstract void move();
}

class Dog extends Animal {
    @Override
    public void makeSound() { System.out.println("汪汪汪!"); }
  
    @Override
    public void move() { System.out.println("狗狗在奔跑"); }
}

class Cat extends Animal {
    @Override
    public void makeSound() { System.out.println("喵喵喵~"); }
  
    @Override
    public void move() { System.out.println("猫咪在优雅踱步"); }
}

第三张脸:接口实现

接口就像是标准化合同,不管你是什么公司,只要签了合同就得按规矩办事:

interface Flyable {
    void fly();
}

class Bird implements Flyable {
    @Override
    public void fly() { System.out.println("鸟儿扇动翅膀飞翔"); }
}

class Airplane implements Flyable {
    @Override
    public void fly() { System.out.println("飞机引擎轰鸣起飞"); }
}

转折:踩坑瞬间

第一个坑:静态方法不参与多态

我天真地以为所有方法都能多态,结果现实给了我一巴掌:

class Parent {
    public static void staticMethod() {
        System.out.println("Parent的静态方法");
    }
  
    public void instanceMethod() {
        System.out.println("Parent的实例方法");
    }
}

class Child extends Parent {
    public static void staticMethod() {
        System.out.println("Child的静态方法");
    }
  
    @Override
    public void instanceMethod() {
        System.out.println("Child的实例方法");
    }
}

// 测试结果让人意外
Parent p = new Child();
p.staticMethod();    // 输出:Parent的静态方法 😱
p.instanceMethod();  // 输出:Child的实例方法 ✅

第二个坑:向下转型的风险

Animal animal = new Dog();
// 危险操作:强制向下转型
Cat cat = (Cat) animal; // 💥 运行时 ClassCastException!

// 安全做法:先判断再转型
if (animal instanceof Cat) {
    Cat cat = (Cat) animal;
    // 安全操作...
}

解决:多态的实战威力

消灭万恶的 if-else

改造前(我的黑历史):

public void handleAnimal(String type) {
    if ("dog".equals(type)) {
        System.out.println("汪汪汪!");
    } else if ("cat".equals(type)) {
        System.out.println("喵喵喵~");
    } else if ("bird".equals(type)) {
        System.out.println("啾啾啾!");
    }
    // 每增加一种动物,就要改这里... 😭
}

改造后(多态的优雅):

public void handleAnimal(Animal animal) {
    animal.makeSound(); // 一行代码搞定!
    animal.move();      // 扩展性拉满!
}

// 使用时:
handleAnimal(new Dog());  // 汪汪汪!狗狗在奔跑
handleAnimal(new Cat());  // 喵喵喵~猫咪在优雅踱步
handleAnimal(new Bird()); // 啾啾啾!鸟儿在飞翔

工厂模式的完美搭配

多态 + 工厂模式 = 代码扩展性的天花板:

class AnimalFactory {
    public static Animal createAnimal(String type) {
        switch (type.toLowerCase()) {
            case "dog": return new Dog();
            case "cat": return new Cat();
            case "bird": return new Bird();
            default: throw new IllegalArgumentException("未知动物类型");
        }
    }
}

// 客户端代码永远不需要修改
Animal pet = AnimalFactory.createAnimal("dog");
pet.makeSound(); // 多态自动选择正确的实现

经验启示

多态的核心价值

好处 说明 实际意义
可扩展性 新增子类无需修改现有代码 开闭原则的完美体现
可维护性 统一接口,降低耦合 改一处影响最小
可读性 代码意图更清晰 见名知意
可测试性 容易mock和单元测试 提高代码质量

设计原则

  1. 面向接口编程:依赖抽象,不依赖具体
  2. 里氏替换原则:子类能够替换父类
  3. 开闭原则:对扩展开放,对修改关闭

踩坑预防指南

  • 静态方法不多态:记住这个铁律
  • 构造方法不多态:构造方法不能被重写
  • private/final方法不多态:它们不能被重写
  • 谨慎向下转型:用instanceof先判断

总结

多态不只是一个技术概念,更是一种编程哲学。它教会我们:

  • 统一标准:定义清晰的接口契约
  • 各司其职:每个实现类专注自己的逻辑
  • 开放扩展:新需求通过新增实现,而非修改原码

真正理解多态的程序员,写出的代码就像乐高积木——每个组件职责清晰,可以自由组合,扩展无限可能。

记住这句话:多态让代码学会了"看人下菜碟"的艺术

本文转自渣哥https://zha-ge.cn/java/13

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消