什么是多态机制?Java语言是如何实现多态的?

2023-11-10

        多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用  在编程时并不确定,而在程序运行期间才确定

[即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法到底调用哪个类中实现的方法,必须由程序运行期间才能决定],

因为在程序运行时才确定具体的类,不用修改源代码程序,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,

[即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态],

这就是多态性

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

        编译时多态静态的,是指方法的重载,根据参数列表的不同来区分不同的函数,通过编辑之后,会变成两个不同的函数,在运行时谈不上多态

        运行时多态动态的,是通过动态绑定来实现的,也就是多态性

多态的实现

java实现多态有三个必要的条件:继承、重写、向上转型

  • 继承:在多态中必须存在有继承关系子类和父类
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法
  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法

只有满足上述三个条件,才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。

对于Java而言,它多态的实现机制遵循一个原则

当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是多态机制?Java语言是如何实现多态的? 的相关文章

  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText

    当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • 在数据流模板中调用 waitUntilFinish() 后可以运行代码吗?

    我有一个批处理 Apache Beam 作业 它从 GCS 获取文件作为输入 我的目标是根据执行后管道的状态将文件移动到两个 GCS 存储桶之一 如果管道执行成功 则将文件移动到存储桶 A 否则 如果管道在执行过程中出现任何未处理的异常 则
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User

随机推荐

  • 深度学习技术在自动驾驶中的应用与挑战

    导读 深度学习技术经过近几年井喷式的发展 在很多领域都得到了广泛的应用 在自动驾驶系统中 深度学习技术也起到了至关重要的作用 同时也面临着非常多的挑战 我们一直在探索 在一个安全 稳定的自动驾驶产品中 深度学习技术应该有着怎样的作用边界 又
  • Unable to load configuration的解决方法

    最近在学Struts2 5 5 因为喜欢用最新的 并且之前没有学习过的经验 就按照一个网上的博客跟着做一个小实例 里面说直接用 Struts2 5 5中自带例子的struts xml文件 结果我就用了 然后写了一个小程序就一直报 Unabl
  • Java中的对象是什么?

    Java是一种面向对象的编程语言 它将世界视为具有属性和行为的对象的集合 Java的面向对象版本非常简单 它是该语言几乎所有内容的基础 因为它对Java非常重要 所以我将对幕后内容进行一些解释 以帮助任何不熟悉Java的人 遗产 通常 所有
  • 奇安信笔试编程题完整解析附代码

    昨天晚上奇安信笔试 两道编程题做的都不好 有紧张的元素 也有自己实力不够硬的问题 总之把两道编程题又做了一遍 思路屡清楚 下次继续努力 其实两道题非常非常简单 如果放在高中数学 基本就是送分题了 但是最近疫情期间 在家都躺退化了 算了 开搞
  • Android性能优化大法——内存优化

    作者 layz4android 内存 是Android应用的生命线 一旦在内存上出现问题 轻者内存泄漏 重者直接crash 因此一个应用保持健壮 内存这块的工作是持久战 而且从写代码这块就需要注意合理性 所以想要了解内存优化如何去做 要先从
  • jqury ajax 提交from conflict,JQuery中使用ajax提交表单遇到的问题

    今天在做维护时 遇到一段JQuery旧代码 看得很纠结 大致结构如下 html代码 javascript代码 mySubmit click function doSubmit 提交 function doSubmit myForm subm
  • 探讨STOS指令

    转载在http hi baidu com darks00n blog item 4c019ec42ad0cdcad00060b1 html 下面是一段win32 console程序 Debug版 的反汇编代码 很程式化的东西 本文不讨论这段
  • Chromium Win10 开发环境搭建

    记录chromium 开发搭建过程 系统 软件环境不同 所遇问题可能不同 但主体关键相似 仅供参考 VS 安装 安装vs2019 the version 10 0 19041 or higher Windows 10 SDK install
  • idea maven项目运行不了,好多包导不了

    其实是idea默认给你选择了自带的maven和仓库 你可以改成你自己的 使用国内镜像就可以了 先简单记录一下 到时再详细写
  • 使用php 实现生成Excel文件并导出

    在现在的项目里 不管是电商项目还是别的项目 在管理端都会有导出的功能 比方说订单表导出 用户表导出 业绩表导出 这些都需要提前生成excel表 然后在导出 实际上是在代码里生成一张excel表 然后通过下载api进行导出的 好了 先给大家讲
  • promise跟ajax区别,Promise和AJAX有什么区别?

    你感到困惑的承诺和Ajax调用 它们有点像苹果和刀子 你可以用刀切苹果 刀是可以应用于苹果的工具 但这两者是非常不同的东西 承诺是管理异步操作的工具 他们会跟踪异步操作何时完成以及结果如何 并让您与其他代码或其他异步操作协调完成以及这些结果
  • 嵌入式学习--vi的基本命令二

    嵌入式学习 vi的基本命令二 vi查找命令 vi替换命令 vi复制和剪切命令 vi查找命令 string 查找字符串string n继续向下查找 N向上查找 按回车后 光标的位置直接跳转到字符char的前面 vi替换命令 范围 s 旧str
  • 2021 字节跳动面试总监首发 1121 道 LeetCode 算法刷题笔记(含答案)

    关于算法刷题的困惑和疑问也经常听朋友们提及 这份笔记里面共包含作者刷 LeetCode 算法题后整理的数百道题 每道题均附有详细题解过程 很多人表示刷数据结构和算法题效率不高 甚是痛苦 有了这个笔记的总结 对校招和社招的算法刷题帮助之大不言
  • Windows与网络基础-1-2-虚拟机安装Windows10/ server2016

    目录 一 下载虚拟机软件 1 1新建虚拟机 1 2选择操作系统类型和windows版本 1 3自定义虚拟机名称 1 4设置最大磁盘大小 1 5配置内存和处理器 1 6挂载镜像文件 1 7进入window配置界面 二 点击进去按步骤安装即可
  • 常用邮箱工具类

    废话不多说 直接上代码 自个耍 package com example demo util import javax mail import javax mail internet InternetAddress import javax
  • 多线程基础篇(包教包会)

    文章目录 一 第一个多线程程序 1 Jconsole观察线程 2 线程休眠 sleep 二 创建线程 三 Thread类及常见方法 1 Thread 的常见构造方法 2 Thread 的几个常见属性 3 启动线程 start 4 中断线程
  • 宝塔面板忘记用户名,忘记密码怎么办?

    1 重新设置密码找回用户名 情况一 已经修改过用户名和密码 很多网上的解决方法都只是告诉我们进入SSH设置 但是很多小伙伴并不知道怎么进入SSH 导致解决该问题很麻烦 其实我们直接在阿里云中云服务器中的远程连接就可以解决这个问题 第一步 直
  • 利用security.js实现RSA加密

    在项目中遇到要对用户输入的密码进行RSA加密的需求 总结一下实现过程 div div
  • Android和java两平台AES的互相加密解密

    import java io UnsupportedEncodingException import java security InvalidKeyException import java security Key import jav
  • 什么是多态机制?Java语言是如何实现多态的?

    多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用 在编程时并不确定 而在程序运行期间才确定 即一个引用变量到底会指向哪个类的实例对象 该引用变量发出的方法到底调用哪个类中实现的方法 必须由程序运行期间才能决定 因为