面向对象进阶,面向对象三大特征之三,多态

本文深入探讨了面向对象的三大特性之一——多态,介绍了其概念、形式、好处,涉及类型转换和实例化操作。通过实际案例和代码演示,展示了如何利用多态实现对象的灵活调用和行为差异化。

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

面向对象三大特征之三:多态

多态是面向对象三大特征中非常重要的知识,我们必须清楚的掌握!

◆多态的概述,多态的形式

什么是多态?

  • 同类型的对象,执行同一个行为,会表现出不同的行为特征。
    多态的常见形式:
父类类型对象名称 = new子类构造器;

接口对象名称 = new实现类构造器;

请仔细查看下面的演示:

package com.polymorphic;

public abstract class Animal {
    public abstract void run();
}

package com.polymorphic;

public class Dog extends Animal{
    @Override
    public void run() {
        System.out.println("狗是四足动物。");
    }
}

package com.polymorphic;

public class Tortoise extends Animal{
    @Override
    public void run() {
        System.out.println("乌龟是四足两栖动物。");
    }
}

package com.polymorphic;

public class Main {
    public static void main(String[] args) {
//        我们想必很熟悉创建类的一般对象了,如下
        Dog d = new Dog();
        Tortoise c = new Tortoise();
//        然而多态就很骚,他要求把父类名写在前面
//        形式:父类名 自定义的对象名 = new 子类名
//        形象的合理性解释:动物肯定包括狗,狗是动物所以可以赋值
//        抽象解释:小范围的对象是可以赋值给大范围的对象的;大盒子装得下小盒子(前提是明确告知了谁是子类谁是父类)
        Animal a = new Dog();
        Animal b = new Tortoise();
//        请仔细观察输出结果,你会发现赋值并不会出现“覆盖”效果,这就是多态
        a.run();
        b.run();
    }
}

狗是四足动物。
乌龟是四足两栖动物。
  • 到这里,想必关于多态 同类型 的对象,执行同一个行为,会表现出不同的行为特征。就了解得差不多了吧

  • 多态中成员访问特点
    ●方法调用:编译看左边,运行看右边。
    变量调用:编译看左边,运行也看左边。 (多态侧重行为多态,面试常考,也是很刁钻的语法点,就离谱)
    在这里插入图片描述

◆多态的好处

在这里插入图片描述
其中第二点是多态的核心优势

执行特征,又叫对象回调:
在这里插入图片描述
しかーし!
在这里插入图片描述

◆多态下引用数据类型的类型转换

在这里插入图片描述

//强制类型转换:
Animal a2 = new Tortoise();
a2.run();
Tortoise t = (Tortoise) a2;
t.egg();

注意:如果转型后的类型和对象真实类型不是同-种类型,那么在转换的时候就会出现ClassCastException

Dog d = (Dog) a2;
注意该代码不会报错,但是是错的,
因为在更上面的代码中a2是大盒子,然后里面装了乌龟这个小盒子,
本质是乌龟,强制转换时就等同于把乌龟转换成狗,狗和乌龟这两个类,这两个小盒子是平级关系
且本质不同,因此不可强制转换

官方对这种情况也是有应对的:
在这里插入图片描述
instanceof方法可以向开发者暴露出对象的真实对象,可以极大地降低对象错误的概率。
使用方式:
在这里插入图片描述
在这里插入图片描述

◆多态的综合案例

在这里插入图片描述
在上面的案例中,键盘、鼠标,归根结底都属于外接的usb部件,那我们就可以定义一个共同的规范(接口),都具有输入操作信息的功能,我们可以定义一个抽象类作为父类通过重写实现自己的独有功能;
接口的实现类将会作为电脑的相应的模块,即对象,此时电脑就变成了最大的盒子,盒子等级依次往下是 电脑–USB设备–键盘模块、鼠标模块

下面的博主正好做好了示例:

电脑与usb的面向对象编程设计模拟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值