知识大全 Java运行时多态性的实现

Posted

篇首语:读和写是学生最必要的两种学习方法,也是通向周围世界的两扇窗口。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java运行时多态性的实现相关的知识,希望对你有一定的参考价值。

Java运行时多态性的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  运行时多态性是面向对象程序设计代码重用的一个最强大机制 动态性的概念也可以被说成 一个接口 多个方法 Java实现运行时多态性的基础是动态方法调度 它是一种在运行时而不是在编译期调用重载方法的机制 下面就继承和接口实现两方面谈谈java运行时多态性的实现

  一 通过继承中超类对象引用变量引用子类对象来实现

  举例说明

  //定义超类superA

  class superA

  

  int i =

  void fun()

  

  System out println( This is superA )

  

  

  //定义superA的子类subB

  class subB extends superA

  

  int m =

  void fun()

  

  System out println( This is subB )

  

  

  //定义superA的子类subC

  class subC extends superA

  

  int n =

  void fun()

  

  System out println( This is subC )

  

  

  class Test

  

  public static void main(String[] args)

  

  superA a

  subB b = new subB()

  subC c = new subC()

  a=b

  a fun()          ( )

  a=c

  a fun()          ( )

  

  

  运行结果为

  This is subB

  This is subC

  上述代码中subB和subC是超类superA的子类 我们在类Test中声明了 个引用变量a b c 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用 也许有人会问 为什么( )和( )不输出 This is superA java 的这种机制遵循一个原则 当超类对象引用变量引用子类对象时 被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法 但是这个被调用的方法必须是在超类中定义过的 也就是说被子类覆蓋的方法

  所以 不要被上例中( )和( )所迷惑 虽然写成a fun() 但是由于( )中的a被b赋值 指向了子类subB的一个实例 因而( )所调用的fun()实际上是子类subB的成员方法fun() 它覆蓋了超类superA的成员方法fun() 同样( )调用的是子类subC的成员方法fun()

  另外 如果子类继承的超类是一个抽象类 虽然抽象类不能通过new操作符实例化 但是可以创建抽象类的对象引用指向子类对象 以实现运行时多态性 具体的实现方法同上例

  不过 抽象类的子类必须覆蓋实现超类中的所有的抽象方法 否则子类必须被abstract修饰符修饰 当然也就不能被实例化了

  二 通过接口类型变量引用实现接口的类的对象来实现

  接口的灵活性就在于 规定一个类必须做什么 而不管你如何做 我们可以定义一个接口类型的引用变量来引用实现接口的类的实例 当这个引用调用方法时 它会根据实际引用的类的实例来判断具体调用哪个方法 这和上述的超类对象引用访问子类对象的机制相似

  举例说明

  //定义接口InterA

  interface InterA

  

  void fun()

  

  //实现接口InterA的类B

  class B implements InterA

  

  public void fun()

  

  System out println( This is B )

  

  

  //实现接口InterA的类C

  class C implements InterA

  

  public void fun()

  

  System out println( This is C )

  

  

  class Test

  

  public static void main(String[] args)

  

  InterA a

  a= new B()

  a fun()

  a = new C()

  a fun()

  

  

  输出结果为

  This is B

  This is C

  上例中类B和类C是实现接口InterA的两个类 分别实现了接口的方法fun() 通过将类B和类C的实例赋给接口引用a而实现了方法在运行时的动态绑定 充分利用了 一个接口 多个方法 展示了Java的动态多态性

  需要注意的一点是 Java在利用接口变量调用其实现类的对象的方法时 该方法必须已经在接口中被声明 而且在接口的实现类中该实现方法的类型和参数必须与接口中所定义的精确匹配

cha138/Article/program/Java/hx/201311/26085

相关参考

知识大全 Java核心 Java中多态的实现机制

Java核心Java中多态的实现机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  多态性是面向

知识大全 JAVA中用接口实现多继承和多态的方法

JAVA中用接口实现多继承和多态的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA里

知识大全 Java中使用接口实现多继承和多态的方法

Java中使用接口实现多继承和多态的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA

知识大全 Java语法规则

Java语法规则  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //多态    定义是指一个多态

知识大全 Java运行时监控,第1部分: Java运行时性能和可用性监控

Java运行时监控,第1部分:Java运行时性能和可用性监控  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 基于Java 2运行时安全模型的线程协作

基于Java2运行时安全模型的线程协作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java

知识大全 Java运行时环境初始化时出现错误

Java运行时环境初始化时出现错误  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  FlashCS

知识大全 面向对象的一些术语精解

  多态一个对象变量可以引用多种实际类型的现象叫做多态(polymorphism)在java和c++语言中指的是可以用子类对象赋给父类对象说道多态就要说说覆蓋(overriding)覆蓋实际上指在同一

知识大全 java封闭之内部类

  java重要的三大特性之封装到今天已经总结完了当然还有一些比较重要的概念没有总结比如staticfinally关键字this关键字构造函数的特性因为考虑到这些概念在继承多态中还会有体现所以等到另外

知识大全 用java api进行sort

  作者SUNJ    本节中所描述的多态算法(polymorphicalgorithms)是由JDK所提供的可重复使用的功能性片段它们均取自Collections类并都采用静态方法(它的第一个参数是