复习下java 多态

来源:互联网 发布:淘宝东西下架的原因 编辑:程序博客网 时间:2024/05/19 16:20
多态的定义:

指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)简而言之就是:==对于同一动作做出的响应产生不同的结果==

多态存在的必要条件:
  1. 在继承的基础上
  2. 要有重写
  3. 父类引用指向子类对象(即向上转型)
多态存在的好处:
  • 可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
  • 可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。
  • 接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
  • 灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
  • 简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
多态的实现方式:继承和接口

继承实现多态:

  • 对于指向子类对象的父类引用,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。
  • 如果父类对象是抽象类,则继承了该抽象类的子类必须父类中的所有抽象方法

接口实现多态

  • 在接口的多态中,指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法
多态分类:
  • 编译时多态:其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态;
  • 运行时多态:而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。
    对于多态的实现主要是基于==动态绑定技术==
class A ...{           public String show(D obj)...{                  return ("A and D");           }            public String show(A obj)...{                  return ("A and A");           }   }   class B extends A...{           public String show(B obj)...{                  return ("B and B");           }           public String show(A obj)...{                  return ("B and A");           }   }  class C extends B...{}   class D extends B...{}
A a1 = new A();          A a2 = new B();          B b = new B();          C c = new C();           D d = new D();           System.out.println(a1.show(b));   ①          System.out.println(a1.show(c));   ②          System.out.println(a1.show(d));   ③          System.out.println(a2.show(b));   ④          System.out.println(a2.show(c));   ⑤          System.out.println(a2.show(d));   ⑥          System.out.println(b.show(b));    ⑦          System.out.println(b.show(c));    ⑧          System.out.println(b.show(d));    ⑨

运行结果:

A and AA and AA and D④   B and A⑤   B and AA and D⑦   B and B⑧   B and B⑨   A and D

此处代码借鉴与网上,如有侵权请及时提出即可删除

原创粉丝点击