• 【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
  • 相关阅读:
    计算机网络基础的一些零散知识要点
    三天吃透Spring Cloud面试八股文
    聊聊 mysql 事务?(一)
    P4实验之防火墙
    Intellij IDEA--常用的配置
    Windows C++ 使用WinAPI实现RPC
    面渣逆袭:Java基础五十三问,快来看看有没有你不会的
    [答疑]《实现领域驱动设计》的译者其实没错?(一)
    DRV8825被国产TMI8420有效替代,国内电机产业发展空间很大
    创建一个给定形状的数组,并用给定的值填充numpy.full()
  • 原文地址:https://blog.csdn.net/weixin_43304253/article/details/133895255