首先我们知道Java是一门面向对象的语言

面向对象三大特性,封装、继承、多态。

封装、继承、多态      ↓

无论是学习路线,还是众人的口语习惯,都是按照这个这样进行排序,这是有原因的。因为封装好了才能继承,封装和继承都是为多态做准备的。

多态的三个前提条件:

1、继承关系

2、方法的重写

3、向上转型(即父类引用指向子类对象)

多态又分为两种情况,编译时多态,运行时多态。先简单介绍一下这两种的区别

编译时多态:对象引用本类实例

废话不多直接上图举例:

上图我们看到cat对象和animal对象都是引用的本类实例,也就是说,在方法启动前,编译已经确定了上面两个toString方法分别是谁调用的

运行时多态:父类引用指向子类对象

上图是父类引用指向子类对象,也就是向上转型。这里的toString方法我们知道返回的肯定是子类的方法的结果。这就是Java的运行时多态(接下来是重点,注意看了),Java从实例类开始寻找匹配的方法,如果没有匹配的方法,沿着继承关系逐渐往上匹配父类的方法。

上面的关系捋顺再说明多态的好处:

我们看到Cat类是继承Animal类的,继承性提高了代码的可维护性

向上转型,不同的实例类,产生不同的结果。如果我在定义一个Dog类也是一样,会输出Dog的toString。这就是代码的可拓展性

 

Java面试题,Java三大特性之一——多态的理解的更多相关文章

  1. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  2. JAVA三大特性之多态

    面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...

  3. java-----理解java的三大特性之多态

    的java提高篇(四)-----理解的java的三大特性之多态 面向对象编程有三大特性:封装,继承,多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外 ...

  4. [转]理解java的三大特性之多态

    java提高篇(四)-----理解java的三大特性之多态   面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外 ...

  5. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  6. java中面向对象的三大特性小结

    java中面向对象的三大特性:封装.继承.多态 封装 把抽象的数据和对数据的操作封装在一起,隐藏变量的实现细节.数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行访问. 1 ...

  7. C++三大特性之多态

    原文地址:https://qunxinghu.github.io/2016/09/08/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E5%A ...

  8. java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  9. 理解 Java 的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

随机推荐

  1. Linux打包、压缩与解压详解

    介绍:在Windows下最常见的压缩文件就只有两种,另一个是.rar,它有.gz..tar.gz.tgz.bz2..Z..tar等众多的压缩文件名,本文就来对这些常见的压缩文件进行总结,在具体总结各类 ...

  2. 火狐浏览器sqlite插件

    https://addons.mozilla.org/zh-cn/firefox/addon/sqlite-manager/

  3. mpvue最佳实践 , 美团出的一个小程序框架

    看手机微信,看到说美团出了1个小程序框架,  mpvue 搜下来试试,看了网上的一个对比 ----------------- 以下为引用 我们对微信小程序.mpvue.WePY 这三个开发框架的主要能 ...

  4. AndroidGradle最实用的指南

    AndroidStudio目前已经成为Android开发人员的主流工具,而Gradle的原理,配置,使用仍然是很多android开发人员感到困惑的地方.网上虽然有很多相关文档,但是要么是只会用但是不知 ...

  5. Python+Selenium笔记(九):操作警告和弹出框

    #之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用)  改成 driver.switch_to.alert就不会了. (一 ...

  6. SublimeText3常用插件及快捷键总结

    SublimeText可谓是前端工程师的代码编辑神器,自从用上它以后一直爱不释手,特别是它强大的插件功能,简直要逆天了.网上也有很多关于SublimeText3的各种插件介绍,其插件功能之多,让人眼花 ...

  7. 【第三组】心·迹 Alpha版本 成果汇报

    GITHUB地址 https://github.com/shirley-wu/HeartTrace 目录 项目简介 成果概要 详细展示(多图预警) 代码结构及技术难点 问题与规划 1. 项目简介 心· ...

  8. cmd 命令总结

    1.windows 系统定时关机  定时关机:shutdown -s -t 300                 at 18:30 shutdown -s 取消定时:shutdown -a 注意:3 ...

  9. ubuntu下编译qt5

    编译步骤参考: http://doc.qt.io/qt-5/linux.html 我们使用源代码和编译目录分离的编译方式, 这样避免编译主机系统和目标系统间的独立. 参考: Qt Configure ...

  10. 《MVC+EF》——用DBFirst创建ADO.NET实体数据模型和对象关系映射

    转载于:http://blog.csdn.net/zhoukun1008/article/details/50528145 现在越来越喜欢MVC了,不光是因为ITOO中用到了他,而是因为它里面包含了很 ...