• JAVA的多态


    本文为读<Java编程思想>后所作的读书笔记, 转载请注明出处

      封装, 继承, 和多态是面向对象编程的三大特性, 而多态是其中相对比较难以理解的一种,特此介绍:

      假设有两个类A和B,其中A为基类,B为A的子类,两个类都包含一个run()方法:

      public class A{

      public void run(){System.out.println("A");};

     }

      public class B extends A{

      public void run(){System.out.println("B");}

    }

      我们可以通过一下方法得到一个B的对象:

      A b=new B();

      这时执行b.run();会输出什么呢? 很显然,我们期待的是"B",而实际上正确的输出也是"B".

      同理,若此时还有一个继承自A的子类C,其中有一个run()方法:

      public class C extends A{

      public void run(){System.out.println("C");}

    }

      当我们通过以下方法创建一个C的对象并调用起run()方法:

      A c=new C();

      c.run();

      执行的结果是"C".

      这就是多态的作用:分离做什么和怎么做.虽然b和c都调用了相同名字的方法run(),但是JAVA却能够在运行时正确的调用其相应子类的方法,而不是其基类的方法.也就是说:b.run()或者c.run()仅仅是告诉b和c对象要执行一个名字叫run()的方法,但是具体要调用的到底是A,还是B和C中的run()方法实体,编程者无需指定,JAVA会在运行时动态的将正确的run()方法的实体绑定到run()的方法调用.然后就会产生正确的结果.这种绑定方法称作"运行时绑定"或者"动态绑定".

      另外,在JAVA中除staticfinal方法以外其他方法都是动态绑定.由于private方法属于final方法,构造器方法是隐式的static方法,所以这两种方法不具有多态性,当执行上面的例子时,若run()方法是static的或者final的,则输出只会是"A".

      任何对域,也就是成员变量的访问都不是多态的,因为访问是在编译期进行的.

  • 相关阅读:
    javascript封装与多态的体现
    js事件处理、事件对象
    对js中this的一点点理解
    js中的位运算
    css中的各种单位简述以及ios10下safari禁止缩放的问题
    js变量提升
    Web Worker javascript多线程编程(一)
    MongoDB数据库备份和恢复
    什么是Git及Git的诞生
    MongoDB安装过程
  • 原文地址:https://www.cnblogs.com/kemaswill/p/Sunow.html
Copyright © 2020-2023  润新知