@author ixenos

 摘要:绑定、动态绑定实现多态、多态的缺陷、纯继承与扩展接口、向下转型与RTTI

 

 

 

绑定


将一个方法的调用和一个方法的主体关联起来,称作(方法调用)绑定:

  1.前期绑定:在程序执行前绑定(由编译器和连接程序实现);

  2.后期绑定:在运行时根据对象的类型绑定(也称动态绑定运行时绑定);

          a) 实现条件:能在运行时判断对象的类型,从而关联对应主体,调用其方法

          b) 编译器一直不知道真实对象类型,只将其认作引用变量的类型且知道有继承关系

          c) Java中除了static方法final方法private方法相当于final方法)是前期绑定之外,其他所有的方法都是后期绑定

 

 

动态绑定实现多态


多态作用:

  1.消除类型之间的耦合关系,使我们可以编写只与基类打交道的程序代码了(比如List<String> = new ArrayList<>();)

  2.使程序有可扩展性,我们可从通用的基类继承出新的数据类型从而添加新的功能,而不需要改变对应接受参数的方法,只与基类接口通信

 

动态绑定:

  1. 假设B extends A,若使A = new B()向上转型,则编译器认为这是合理的协变,编译通过!但此时编译器只知道B是A的子类,无法得知B的具体类型!

  2. 运行时,Java的后期绑定机制判定该对象new B()的运行时类型为B,所以方法的调用策略是从B类中调用相应方法(static、final方法除外)

  3. 动态绑定(后期绑定或运行时绑定)常被指称为多态

 

 

多态的缺陷


 “覆盖”私有方法时

 1 public class Pri{
 2     private void f(){ System.out.println("I'm private f()"); }
 3 
 4     public static void main(String[] args){
 5         Pri pri = new Pub(); //向上转型,动态调用Pub类方法
 6         pri.f();
 7     }
 8 }
 9 
10 class Pub{
11     public void f(){ System.out.println("I'm public f()"); }
12 }
13 
14 
15 ----------------------------------
16 输出:  I'm private f()
View Code

相关文章: