「12」-java中的面向对象-多态polymorphism

本文深入解析Java中的多态概念,通过生动的例子说明了同一方法在不同对象上调用时的多样化表现,强调了继承、方法重写及父类引用指向子类对象的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**多态,**字面意思就是多种状态

在java中,多态是指同一个方法的调用,由于对象的不同,可能会有不同的结果

这句话的意思用白话表示就是:一千个读者一千个哈姆雷特 ,一件事的做法有千万种(因人而异)

举个例子

现实生活中每个人都需要休息,但休息的方式可能都不一样,尽管都叫休息,但是我更偏向于睡觉,我朋友的休息,更多的是打游戏,我同学们的休息可能就是真的在刷一天的抖音,所以这就是多态

多态要点:

  1. 多态是方法的多态,不是属性的多态(多态与属性无关)。

  2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。

  3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

便于理解:

首先多态是需要继承,方法重写 父类引用子类对象调用子类重写的方法来支持的,下面代码会演示

拿生活中每天都需要重复的吃饭来举例子:

不管哪个国家的人,只要是人,都继承了统一的父类 - 人类
(继承)
不管是那种人就都需要吃饭,中国人-筷子 ,欧美- 刀叉 印度- 手
(重写父类方法)
3.人 = 印度人 → 用手吃饭
人 = 中国人 → 用筷子吃饭
父类引用子类对象调用子类重写方法 (构成多态)

这里没有歧视啊,各国饮食习惯不同,所以用来举例子 可以看到不同的对象被父类引用后,产生的效果也是不同,所以这里就形成了多态

代码演示:

class Animal {
    public void shout() {
        System.out.println("叫了一声!");
    }
}
class Dog extends Animal {
    public void shout() {
        System.out.println("旺旺旺!");
    }
    public void seeDoor() {
        System.out.println("看门中....");
    }
}
class Cat extends Animal {
    public void shout() {
        System.out.println("喵喵喵喵!");
    }
}
public class TestPolym {
    public static void main(String[] args) {
        Animal a1 = new Cat(); // 向上可以自动转型 父类引用指向子类对象
        //传的具体是哪一个类就调用哪一个类的方法。大大提高了程序的可扩展性。
        animalCry(a1);
        Animal a2 = new Dog();
        animalCry(a2);//a2为编译类型,Dog对象才是运行时类型。
         
        //编写程序时,如果想调用运行时类型的方法,只能进行强制类型转换。
        // 否则通不过编译器的检查。
        Dog dog = (Dog)a2;//向下需要强制类型转换
        dog.seeDoor();
    }
 
    // 有了多态,只需要让增加的这个类继承Animal类就可以了。
    static void animalCry(Animal a) {
        a.shout();
    }
 
    /* 如果没有多态,我们这里需要写很多重载的方法。
     * 每增加一种动物,就需要重载一种动物的喊叫方法。非常麻烦。
    static void animalCry(Dog d) {
        d.shout();
    }
    static void animalCry(Cat c) {
        c.shout();
    }*/
}

解说代码视频](https://www.bilibili.com/video/av94014618/)
总结:多态的好处就是节省代码让代码更加灵活

不论增加多少子类,都没有问题,如果没有多态就会有大量的重载,具体的看代码注解就好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值