码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Java基础面试十五】、 说一说你对多态的理解


    文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

    面试官:说一说你对多态的理解

    参考答案:

    因为子类其实是一种特殊的父类,因此Java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,或者被称为向上转型,向上转型由系统自动完成。

    当把一个子类对象直接赋给父类引用变量时,例如 BaseClass obj = new SubClass();,这个obj引用变量的编译时类型是BaseClass,而运行时类型是SubClass,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,这就是多态。

    扩展阅读

    多态可以提高程序的可扩展性,在设计程序时让代码更加简洁而优雅。

    例如我要设计一个司机类,他可以开轿车、巴士、卡车等等,示例代码如下:

    class Driver {
        void drive(Car car) { ... }
        void drive(Bus bus) { ... }
        void drive(Truck truck) { ... }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在设计上述代码时,我已采用了重载机制,将方法名进行了统一。这样在进行调用时,无论要开什么交通工具,都是通过driver.drive(obj)这样的方式来调用,对调用者足够的友好。

    但对于程序的开发者来说,这显得繁琐,因为实际上这个司机可以驾驶更多的交通工具。当系统需要为这个司机增加车型时,开发者就需要相应的增加driver方法,类似的代码会堆积的越来越多,显得臃肿。

    采用多态的方式来设计上述程序,就会变得简洁很多。我们可以为所有的交通工具定义一个父类Vehicle,然后按照如下的方式设计drive方法。调用时,我们可以传入Vehicle类型的实例,也可以传入任意的Vehicle子类型的实例,对于调用者来说一样的方便,但对于开发者来说,代码却变得十分的简洁了。

    class Driver {
        void drive(Vehicle vehicle) { ... }
    }
    
    • 1
    • 2
    • 3
  • 相关阅读:
    PHP 包含文件
    【计网】(三)超网、路由、NAT协议
    深度剖析React懒加载原理
    黑猫带你学Makefile第9篇:menuconfig/Kconfig/deconfig/.config及Makefile之间的关系
    【数字信号去噪】基于matlab粒子滤波器与FBS、MAP平滑方法数字信号去噪【含Matlab源码 2179期】
    vcruntime140.dll缺失如何修复,vcruntime140.dll重新安装方法分享
    供应链投毒预警 | 恶意NPM包利用Windows反向shell后门攻击开发者
    我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效
    恶劣天气 3D 目标检测数据集收集
    C#应用程序界面开发基础——窗体控制(1)——Form窗体(删除事件部分,没看懂)
  • 原文地址:https://blog.csdn.net/weixin_43304253/article/details/133895255
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号