12 Java面向对象之多态

JavaSE 基础之十二

12 Java面向对象之多态

① 多态的概念及分类

  1. 多态的概念:对象的多种表现形式和能力
  2. 多态的分类
      1. 静态多态:在编译期间,程序就能决定调用哪个方法。方法的重载就表现出了静态多态。
      2. 动态多态:在程序运行期间,才能决定调用对象的哪个方法。在继承中,父类对象引用指向子类对象。
  3. 动态多态的特点
    1. 父类对象可以将引用指向子类对象,也可以指向本类对象。
    2. 多态其实指方法的多态:创建本类对象调用就是本类的方法。创建子类对象调用就是子类的方法。
    3. 如果子类没有重写父类的方法,默认就调用子类继承的方法(父类的方法)。
    4. 只能父类对象引用指向子类对象,不能反过来子类引用指向父类。
  4. 动态多态存在的条件
    1. 要有继承(两个类之间存在继承关系,子类要继承父类)。
    2. 要有重写(子类继承父类,子类一定要重写父类的方法)。
    3. 父类引用指向子类对象。
  5. 静态多态与动态多态的区别
    1. 相同:都是方法的多态,在代码执行过程中调用不同方法达到不同的效果。
    2. 不同:
      1. 静态多态重载来实现的,动态多态是用重写来实现的。
      2. 静态多态一个类的多个方法,相同行为的不同表现形式。
      3. 动态多态在运行的时候再决定执行的是某个子类里边的方法,将多态的方法分配到每个子类里边。

② 动态多态的应用

  1. 动态绑定机制
      在面向对象程序开发中,将一个方法调用与该方法所在的类关联起来,称为“绑定”。
      所谓的动态绑定,是指在运行时根据具体对象的类型进行绑定。
      当父类引用指向子类对象的时候,如果调用被子类重写的方法,那么表现得不是父类中的效果而是子类重写后的效果。
  2. 多态参数
      多态参数:就是当方法的某个形式参数是一个引用的时候,与该引用兼容的任何对象都可以传递给方法,从而允许方法接收不同数据类型的形式参数。
      例如:equals()方法
      如果方法中调用该对象的一个被重写的方法,那么不同类型的子类对象会表现出不同的体现。
  3. 异构集合
      创建一个不是同一类型但是有共同父类的数据集合。不同对象的集合称为异构集合。

③ instanceOf

  1. Java的多态性导致引用变量类型和实际引用的对象可以不一致。为了更准确区分出引用的是什么类型的对象,Java引入了instanceof运算符。
  2. 但是在Java中不推荐使用,推荐使用重载的方式。
  3. 只能用于对象。

④ 对象的转型

  1. 自动转型
      通过父类引用指向子类对象,其实子类自动转换成了父类的数据类型,在继承中子类重写了父类的方法,提供的方法比父类更加强大。
      向上转型存在一定的缺陷,将子类转换为父类对象,调用的时候只能调用父类的属性和行为,子类自己扩展的属性和行为无法使用。
  2. 强制转型 
      向下转型的好处:可以调用子类继承的属性和方法,还可以调用扩展的内容。

posted on 2019-03-18 20:04  PenjayFeng  阅读(172)  评论(0编辑  收藏  举报

导航