java多态与动态绑定

多态是动态绑定的基础

变量可以指示多种对象的现象称为多态

调用方法的机制:

  1. 先看调用方法的隐式参数类型(如果隐式参数引用子类的对象,那么这里所说的隐式参数类型不是子类的类型!!!)比如   B extends A   A a = new B();a.read()  这里隐式参数类型指的就是a的类型A
  2. 根据隐式参数类型找到和调用方法的名字相同的相应的类的方法名字,  如:a.read()   在A类中找到方法名为read的所有方法
  3. 再看显式类型参数是否一样   如:a.read(new B())  找到A类中read方法的显式参数类型是否为B  ,如果是,则找的就是这个方法,否则看第4条
  4. 如果不一样再考虑多态问题,找到显式参数符合多态(继承关系最近的)的那个方法, 如果有read(A a)这个方法,因为B继承自A  所以找的就是这个方法
  5. 再看变量是否引用子类对象,如果有,再看那个方法是否在子类中重写了,如果重写,则用子类的那个方法,如果没重写,那就用第4条找到的方法
  6. 如果变量没有引用子类对象,那就用第4条找到的方法
posted @ 2016-11-18 21:59  下雨天MJ  阅读(69)  评论(0)    收藏  举报