镇江网络违法网站,温州网站设计制作,用手机做电影网站,江苏省建设工程备案网站文章底部有个人公众号#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享#xff1f; 踩过的坑没必要让别人在再踩#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官#xff1a;说一说你对多态的理解 … 文章底部有个人公众号热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享 踩过的坑没必要让别人在再踩自己复盘也能加深记忆。利己利人、所谓双赢。 面试官说一说你对多态的理解
参考答案
因为子类其实是一种特殊的父类因此Java允许把一个子类对象直接赋给一个父类引用变量无须任何类型转换或者被称为向上转型向上转型由系统自动完成。
当把一个子类对象直接赋给父类引用变量时例如 BaseClass obj new SubClass();这个obj引用变量的编译时类型是BaseClass而运行时类型是SubClass当运行时调用该引用变量的方法时其方法行为总是表现出子类方法的行为特征而不是父类方法的行为特征这就可能出现相同类型的变量、调用同一个方法时呈现出多种不同的行为特征这就是多态。
扩展阅读
多态可以提高程序的可扩展性在设计程序时让代码更加简洁而优雅。
例如我要设计一个司机类他可以开轿车、巴士、卡车等等示例代码如下
class Driver {void drive(Car car) { ... }void drive(Bus bus) { ... }void drive(Truck truck) { ... }
}在设计上述代码时我已采用了重载机制将方法名进行了统一。这样在进行调用时无论要开什么交通工具都是通过driver.drive(obj)这样的方式来调用对调用者足够的友好。
但对于程序的开发者来说这显得繁琐因为实际上这个司机可以驾驶更多的交通工具。当系统需要为这个司机增加车型时开发者就需要相应的增加driver方法类似的代码会堆积的越来越多显得臃肿。
采用多态的方式来设计上述程序就会变得简洁很多。我们可以为所有的交通工具定义一个父类Vehicle然后按照如下的方式设计drive方法。调用时我们可以传入Vehicle类型的实例也可以传入任意的Vehicle子类型的实例对于调用者来说一样的方便但对于开发者来说代码却变得十分的简洁了。
class Driver {void drive(Vehicle vehicle) { ... }
}