美文网首页
Java基础 (4) 多态

Java基础 (4) 多态

作者: perry_Fan | 来源:发表于2019-02-18 19:37 被阅读0次

问题1. Java中实现多态的机制是什么?

继承允许将对象视为它自己本身的类型或其基类型加以处理,从而使同一份代码可以毫无差别地运行在这些不同的类型之上。其中,多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要这些类型由同一个基类所导出。所以,多态的作用主要体现在两个方面:

  • 多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来,从而实现将改变的事物与未变的事物分离开来;
  • 消除类型之间的耦合关系(类似的,在Java中,泛型也被用来消除类或方法与所使用的类型之间的耦合关系)
1. 实现机制

方法的覆盖能够很好地实现多态,但是当使用一个基类引用去调用一个覆盖方法时,到底该调用哪个方法才正确呢?

将一个方法调用同一个方法主体关联起来被称作绑定。若在程序执行前进行绑定,叫做 前期绑定 。但是,显然,这种机制并不能解决上面的问题,因为在编译时编译器并不知道上述基类引用到底指向哪个对象。解决的办法就是 后期绑定 (动态绑定/运行时绑定):在运行时根据对象的具体类型进行绑定。

事实上,在Java中,除了static方法和final方法(private方法属于final方法)外,其他所有的方法都是后期绑定。这样,一个方法声明为final后,可以防止其他人覆盖该方法,但更重要一点是:这样做可以有效地关闭动态绑定,或者说,告诉编译器不需要对其进行动态绑定,以便为final方法调用生成更有效的代码。

基于动态绑定机制,我们就可以编写只与基类打交道的代码了,并且这些代码对所有的导出类都可以正确运行。或者说,发送消息给某个对象,让该对象去断定该做什么事情。

2. 向下转型与运行时类型识别

由于向上转型会丢失具体的类型信息,所以我们可能会想,通过向下转型也应该能够获取类型信息。然而,我们知道向上转型是安全的,因为基类不会具有大于导出类的接口。因此,我们通过基类接口发送的消息都能被接受,但是对于向下转型,我们就无法保证了。

要解决这个问题,必须有某种方法来确保向下转型的正确性,使我们不至于贸然转型到一种错误的类型,进而发出该对象无法接受的消息。在Java中,运行时类型识别(RTTI)机制可以处理这个问题,它保证Java中所有的转型都会得到检查。所以,即使我们只是进行一次普通的加括弧形式的类型转换,再进入运行期时仍会对其进行检查,以便保证它的确是我们希望的哪种类型。如果不是,我们就会得到一个类型转换异常:ClassCastException。

3、多态的应用举例

策略模式;
适配器模式;

引用链接:https://blog.csdn.net/justloveyou_/article/details/52798666

相关文章

  • Java基础 (4) 多态

    问题1. Java中实现多态的机制是什么? 继承允许将对象视为它自己本身的类型或其基类型加以处理,从而使同一份代码...

  • 招银网络面试题、考点、知识点总结(Java岗)

    java基础 全是基础不用多说肯定考的多,尤其是招银 OOP特性/java语言特性:封装、继承、多态 多态具体的表...

  • 招银网络面试题、考点、知识点总结(Java岗)

    java基础 全是基础不用多说肯定考的多,尤其是招银 OOP特性/java语言特性:封装、继承、多态 多态具体的表...

  • Java笔记

    Java基础 Java面试通关要点 1.面向对象的特征 封装 继承 多态 封装继承多态 2.final,final...

  • Android面试

    JAVA 基础 java的特点 (OOP),封装、继承、多态 ==、equals、hashCode的作用,区别 什...

  • 面经一

    目的: 总结下面试时遇到的问题,并附上自己的答案. 1 Java基础 1.1 Java的继承,多态。 以及多态...

  • Java基础-多态

    1.什么是多态: 同一个对象在不同时刻体现出来的不同状态. 2.多态的前提: A:有继承或者实现关系.B:有方法重...

  • JAVA基础-多态

    JAVA基础-多态 结论: 1、当子父类中出现同名的成员变量时,多态调用该变量时,如果父类没有该变量,则编译失败。...

  • Java基础-多态

    一、实质(比较官方的回答) 多态是指:当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务,而这一切对...

  • Java的基本特性

    关系 Java的四个基本特性分别是抽象,封装,继承,多态。概括起来可以这么理解,抽象、封装、继承是多态的基础,多态...

网友评论

      本文标题:Java基础 (4) 多态

      本文链接:https://www.haomeiwen.com/subject/dyyreqtx.html