Java多态,在之前的向上转型的文章中已经介绍了使用场景和为什么要通过向上转型实现运行时多态,请先看文章:张舰:Java 向上转型和向下转型

这篇文章主要是总结一下Java多态的概念,具体的例子请参考向上转型那篇文章。

1、面向对象编程的三大特性

继承、封装和多态。

继承

继承的目的是为了少写重复代码。有一些类具有共同的特点,具体表现在有相同的成员属性和方法,将这些具有相同特征的成员属性和方法提炼出来,组成一个父类,子类继承这个父类,相同的成员属性和方法仅在父类里定义,子类可以直接使用,这样在子类里仅定义每个类独有的方法和成员属性,少写重复代码。

封装

封装隐藏了类的内部实现机制,对外仅提供公共的接口供外部对象使用,这样做的好处是解耦。试想一下当方法的内部实现机制改变了,但对外提供的接口没有改变,外部业务逻辑对类的内部实现不感知,这样及时升级或者优化了内部实现,也不会影响外部调用这个接口的业务逻辑。

多态

多态的目的也是为了少写重复代码,当方法的入参是引用时体现的更清晰。定义一个父类的引用,指向子类的对象,这个引用具体指向的是哪个子类在编译时不能确定,只有在运行时才能确定,这就是所谓的动态绑定。这样只写一份代码,就可以让引用指向不同子类的对象,让程序选择多个运行状态,增强了程序的扩展性。

2、多态的分类

多态分为编译时多态和运行时多态。

编译时多态

编译时多态是指函数重载。同名函数具有不同的参数列表(参数类型不同、参数个数不同或者二者都不同),这类函数就实现了函数重载。编译时多态是静态的,在编译期间根据实际调用方法的参数列表就能确定到底调用的是哪个函数。

运行时多态

运行时多态就是上面讲的动态绑定,在编译期间不能确定父类的引用指向的是具体哪个子类的对象,只有在程序实际运行时才能确定,我们这里讲的主要是运行时多态。

3、运行时多态的实现条件

运行时多态的三个必要条件:继承、重写和向上转型。继承:在多态中必须存在有继承关系的子类和父类;

重写:子类必须对父类的某些方法进行重写,这样父类的引用在调用这些方法时才会在运行时确定调用的是哪个子类的方法;

向上转型:必须存在父类的引用指向子类的对象,该引用不仅可以调用父类的成员和方法,也可以调用子类里重写了父类的方法,但是不能调用子类里有而父类里没有的方法。

4、运行时多态的实现形式

运行时多态的实现形式有两种:继承和接口,在向上转型中体现如下:接口:声明一个接口类型的引用,指向实现了该接口的类的对象,实现了该接口的类存在多个;

继承:声明一个父类的引用,指向子类对象,继承了该父类的子类存在多个。

接口的例子我懒得写了,继承的例子见向上转型那篇文章。

参考java提高篇(四)-----理解java的三大特性之多态 - chenssy - 博客园​www.cnblogs.com张舰:Java 向上转型和向下转型​zhuanlan.zhihu.com

java函数多态_Java 多态相关推荐

  1. java 多态_Java 多态

    Java多态,在之前的向上转型的文章中已经介绍了使用场景和为什么要通过向上转型实现运行时多态,请先看文章:张舰:Java 向上转型和向下转型 这篇文章主要是总结一下Java多态的概念,具体的例子请参考 ...

  2. java多台_Java 多态

    Java中多态的特性,在学习中就是很难懂,比较抽象的概念.学的时候就犯糊涂,但日后会发现,基础在日常工作的理解中占有重要的角色. 下面,我将用一个代码实例,回忆和巩固多态的概念和存在的意义.理解多态, ...

  3. java 泛型 多态_Java 多态

    Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 现实中,比如我们按下 F1 键这个动 ...

  4. java多态的理解(运行时多态)_Java多态的理解

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

  5. java读书雷_Java多态学习笔记

    java多态学习笔记 概述 多态的格式与使用 /* 代码中体现多态性:父类引用指向子类对象. */ 格式: 父类名称 对象名 = new 子类名称(); 或者 接口名称 对象名 = new 实现类名称 ...

  6. java应用程序多态_java – 多态和n层应用程序

    这是一个很好的问题.这里有不止一个似是而非的方法;你必须平衡权衡,做出适合你情况的选择. (1)有些人会认为Document接口应该为实例提供一个自己呈现的方法.这从OO的角度来看是有吸引力的,但是根 ...

  7. java 函数内部类_java 内部类详解 转

    classOuter {classInner { } } (二) 内部类的访问规则 ​ A:可以直接访问外部类的成员,包括私有 ​ B:外部类要想访问内部类成员,必须创建对象 (三) 内部类的分类 ​ ...

  8. java 函数签名_Java方法签名和接口

    我们知道方法签名只包括方法名称和参数列表,但不包括方法返回类型.那么为什么我为以下代码收到编译器错误,因为java不区分具有相同签名的方法. public class InterfaceTest im ...

  9. java函数练习题_Java 函数 编程练习题

    1.分解质因数 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你 ...

最新文章

  1. php round函数输出不对_Python 四舍五入函数 Round
  2. SSH——增删改的实现一
  3. c++ 向量的值逆序输出_C++中vector的常用方法
  4. 剑指offer--二维数组的查找
  5. redis 分布式锁的 5个坑,真是又大又深
  6. SQL Server中SQL Union vs Union All
  7. 【计算机本科补全计划】Mysql 学习小计(1)
  8. Web Api 中返回JSON的正确做法
  9. maven deploy到nexus报错:Return code is: 401, ReasonPhrase:Unauthorized
  10. mysql sumif优化,sumif函数的使用方法
  11. 每天进步一点点013
  12. noip2017普及组
  13. php varbinary,php – 无法从MSSQL中获取varbinary数据
  14. EasyDarwin开源流媒体服务器Golang版本:拉转推功能之拉流实现方法
  15. 这次的PION的总结
  16. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于客户时间窗变化的物流配送管理系统设计ro75j
  17. 线上告警CPU使用率过高排查分析
  18. 埃博拉病毒的实验室症断
  19. 智能卡应用的开发流程
  20. 深度学习——早停法(Early Stopping)

热门文章

  1. 计算机网络基本知识总结
  2. 盐城北大青鸟机电基地UI作品
  3. mysql 索引类型 ref_Mysql 索引类型+索引方法
  4. MATLAB(5)绘图
  5. 现实中网络如何接入使用(由Internet到手机WiFi上网)
  6. 有哪些SQL优化的手段?
  7. 链接服务器查询导致的阻塞
  8. python封装C++接口
  9. 现有的静态代码扫描体系弱爆了?看看阿里的吧!
  10. 在EmberZNet中创建自定义CLI命令