1.多态

1.1 什么是多态

  不同类的对象对同一消息作出不同的响应就叫多态。

  举例:小时候玩的游戏:坦克,同样形态的坦克,运动方式和速度都是一样的,但是血量却不一样,用多态实现坦克就是,父类定义坦克的运行方式和速度,派生类内定义坦克的颜色和血量。

1.2 为什么用多态

  首先明白多态的作用:

  1.2.1应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承
  1.2.2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,

    还是刚才那个坦克游戏 ,当我们确定了坦克的玩法、血量扣除方式,这里就是逻辑层,一般这里没有问题的情况下 我们是不会去改变他的,那么如果现在游戏升级,需要添加一种新的坦克呢? 这个时候就多态的作用就体现出来了,我们只需增加一个新的派生  类,继承 相同的父类就可以了。

  Ps : 疑惑: 我最开始在想多态的时候很疑惑,既然都是添加新的方法(虽然多态是相同的方法名,但始终是新添加了一个派生类)为什么我不把所有派生类都汇集到一个类中,这样在使用中就不用再实例化新的对象了?

         解惑: 其实道理很简单,比如我们日常在使用接口的过程中,遇到很多不同的动作需求,但是其中有部分参数是相同的,此时就可以使用多态来解决 ,我们已经确保了我们的逻辑过程是正确的 我们只需要通过我们的配置文件来告知程序 ,使用哪个实现类就行了,这样既减少了代码的修改,同时兼容性也得到了提升。

1.3 多态的先行条件

  1.3.1 有继承关系

  1.3.2 子类重写父类方法

    既然多态存在必须有 “子类重写父类方法”这一条件,那么以下三种类型的方法是没有办法表现出多态特性的

      1.3.2.1 static方法,因为被static 修饰的方法都是属于类的,而不是属于实例的

      1.3.2.2 final方法,因为final修饰的方法无法被子类重写

      1.3.2.3 private 方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是它是无法被外部所引用的,所以不能实现多态

  1.3.3 父类引用指向子类对象

原文地址:https://www.cnblogs.com/mokpiet/p/13648217.html