Java当中多态的理解

news2024/11/19 4:39:18

1. 什么是多态

        同一操作,作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。   

        对应到 Java 里就是针对同一个类型的对象,执行同一个方法,会表现出不同的行为。

        简单点说:   就是用基类(超类或父类)的引用指向子类的对象。

2. 多态的分类

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

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

        而运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。

编译时多态:

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zhaoxn
 * @Date: 2022/12/21/20:50
 * @Description:重载
 */
public class Overload {

    void method(int a) {
        System.out.println ("一个参数" + a);
    }

    void method(int a, int b) {
        System.out.println ("两个参数: " + a + "," + b);
    }

    String method(String a,String b) {
        System.out.println("三个参数: " + a);
        return a+b;
    }

    //测试类
    public static void main(String[] args) {
            Overload overload = new Overload();
            overload.method(1);
            overload.method(1, 2);
            overload.method("a","b");
    }

}

        这里方法method方法重载了 3 次,第一个方法有 1 个 int 参数,第二个方法有 2 个 int 参数,第三个方法有 2个 String 参数。调用哪个方法取决于我们在调用方法时传递的参数。这发生在运行编译时,因此这种类型的多态性称为编译时多态性。

运行时多态:

HashMap实现了Map接口,类图如下:    

 LinkedHashMap实现了Map接口,类图如下:    

 代码如下:

 格式:父类类型 变量名 = new 子类对象

public static void main(String[] args) {
        Map map = new HashMap<>();//new LinkedHashMap();
        map.put("key","value");
    }

3. 多态需要具备哪些条件?

   Java中实现多态需要三个条件:

  •         需要有继承关系的存在。
  •         需要有方法的重写。
  •         需要有父类的引用指向子类对象。

4. 多态的好处

  • 提高了代码的维护性(继承保证)
  • 提高了代码的扩展性(由多态保证)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<Linux进程信号>——《Linux》

本节重点&#xff1a; 1. 掌握Linux信号的基本概念 2. 掌握信号产生的一般方式 3. 理解信号递达和阻塞的概念&#xff0c;原理。 4. 掌握信号捕捉的一般方式。 5. 重新了解可重入函数的概念。 6. 了解竞态条件的情景和处理方式 7. 了解SIGCHLD信号&#xff0c; 重新编写信号处理…

面试官:Docker 有几种网络模式?5 年工作经验都表示答不上来。。

docker容器网络 Docker在安装后自动提供3种网络&#xff0c;可以使用docker network ls命令查看 [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE cd97bb997b84 bridge bridge l…

第1章 概述

第一章 概述 考试范围&#xff1a; 1.1-1.10 考试内容&#xff1a; 章节后的Review Terms&#xff08;名词基本都在课文中&#xff09; 考试题型&#xff1a; 综合题 Review Terms Database-management system (DBMS) &#xff1a;A collection of interrelated data and a …

信息检索 Information Retrieval

信息检索主要是查找与用户查询相关的文档。 给定&#xff1a;大型静态文档集合 和信息需求&#xff08;基于关键字的查询&#xff09; 任务&#xff1a;查找所有且仅与查询相关的文档 典型的 IR 系统&#xff1a; • 搜索一组摘要 • 搜索报纸文章 • 图书馆搜索 • 搜索网络 …

毕业后,我已经离开机械行业转行码农一年多了......

背景 鄙人本科毕业两年有余&#xff0c;机械工程专业&#xff0c;我已经离开机械行业转行码农一年多了。 如果有正在学习的&#xff0c;退学还是千万不要&#xff0c;不过能换专业就换专业&#xff0c;不能换就往机电一体化靠&#xff0c;加上自学编程&#xff0c;以后做嵌入…

计算机毕设Python+Vue野生动物保护资讯管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

STM32的ST-link调试下载

调试原理 STM32F-10X使用M3内核&#xff0c;该内核支持复杂的同i傲视操作&#xff0c;硬件调试模块允许在取指令&#xff08;指令单步运行&#xff09;或访问数据&#xff08;数据断电时&#xff09;使得内核停止。在内核停止时&#xff0c;内核状态都可被查询&#xff0c;完成…

范登堡(van den berg)CPT使用记录

前段时间的CPT外业所使用的设备是范登堡的井下式或者说交互式的静力触探仪&#xff08;CPT&#xff09;&#xff0c;型号是WISON-APB&#xff0c;下面是官网提供的照片。根据官网的介绍&#xff0c;它的探测工具分为三种&#xff0c;分别50KN&#xff08;3m&#xff09;、100KN…

KVM部署操作-尚文网络xUP楠哥

~~全文共1250字&#xff0c;阅读需约5分钟。 进Q群11372462&#xff0c;领取专属报名福利! # 安装KVM先决条件 KVM 需要有 CPU 的支持&#xff08;Intel VT 或 AMD SVM&#xff09;&#xff0c;在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持。 基于 Intel 处理器的…

Qt之使用CQU库快速开发统一风格界面

在使用Qt开发时&#xff0c;肯定是想让开发的项目界面统一风格&#xff1b;不希望每个界面都要程序员用代码去修饰美化以及进行事件处理等等&#xff0c;这样非常繁琐&#xff0c;容易出错而且没有格调&#xff1b;所以我就开发一个动态链接库&#xff0c;封装统一的风格界面、…

尚医通-前端Vue学习(九)

&#xff08;1&#xff09;vscode的安装及使用 &#xff08;2&#xff09;前端知识-ES6语法知识点 &#xff08;3&#xff09;Vue-入门 &#xff08;4&#xff09; Vue的生命周期 &#xff08;5&#xff09;Vue-Axios的使用 &#xff08;6&#xff09;ElemmentUI介绍 &…

Java项目:SpringBoot课程在线学习系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 采用SpringBootSpringMybatisThyeleaf实现的在线学习系统&#xff0c;一共2个角色&#xff1a;管理员与学生。 管理员角色功能&#xff1a; 登录…

Unreal Engine中的Actor:理解、生成与消亡

目录 谈谈Actor 生成&#xff08;实例化&#xff09;Acotr StaticClass/UClass&#xff1a;类模板/类的快照 Actor的生命周期 Actor的消亡 Destroy&#xff1a;标记删除 SetLifeSpan&#xff1a;设置存活时间 Destroyed&#xff1a;消亡Actor的通知 EndPlay&#xff1…

chatGPT对接微信

代码地址: https://github.com/jeffcail/go-wecaht-bot 喜欢的帅锅美女可以点个star哦&#x1f60a; 背景 玩一玩chatGPT。只因GPT你太美&#xff5e;&#xff5e;&#xff5e; wechat SDK go get github.com/eatmoreapple/openwechat实现功能 自动通过好友申请用户私聊回…

我的转行之路

我一直想为自己没有继续从事编程&#xff0c;而转到铁路行业找一个合理的理由&#xff0c;来掩饰我的愚蠢。我日思夜想终于找到了更合理更有说服力的理由&#xff0c;十个字&#xff0c;目光的短浅&#xff0c;认知的缺乏。 那个时候&#xff0c;只被一毕业就能拿到不错的工资…

Python还有发展前景吗?现在该怎么去学习?

从2008年开始Python就突然火了起来&#xff0c;腾讯最近组织了一个大型Python技术交流峰会&#xff0c;由此可见Python现在已经到了我们不能想象的境界&#xff0c;一切的步伐都要跟着大公司走&#xff0c;腾讯这样级别的公司都这样重视Python技术&#xff0c;可见Python的发展…

什么样的人适合当黑客?

别说我没资格说这些话或是我的话是废话(对你来说是,对别人呢?),我想任何人都有资格尽自己的能力帮助别人. 首先,看到这篇文章,觉得好长,好烦,懒的看,走人… OK,我觉的你不适合做黑客&#xff01; 07年我考上大学&#xff0c;选择了机械制造及其自动化&#xff08;数控编程&a…

【linux kernel】linux内核裁剪随想

为什么需要裁剪&#xff1f; 首先&#xff0c;裁剪并不一定是缩小内核镜像的大小&#xff0c;而是移植和适配。内核支持的特性很多&#xff0c;站在项目的角度&#xff0c;不一定全部需要这些特性和功能。这时候就需要将不需要的特性和功能剔除&#xff0c;随着这个过程的进行…

LabVIEW在两台计算机之间传输数据

LabVIEW在两台计算机之间传输数据 有几种网络协议可用于完成此任务。使用正确的网络协议白皮书将完成为应用选择正确协议的任务。它涵盖了控制和监视应用中最常用的通信模型&#xff0c;并根据配置、性能、易用性等推荐最适合每种情况的网络协议。 参考的白皮书重点介绍了三种…

【MAX7800与ESP8266mcu通讯关键字控制】

【MAX7800与ESP8266mcu通讯关键字控制】 1. 前言2. 实验条件2.1 硬件条件2.2 软件条件3. 程序编写3.1 ESP8266程序解剖3.2 MAX7800程序解剖4. 实验效果4.1 esp8266打印如下4.2 max7800打印如下5. 小结1. 前言 前期搭好MAX7800 的eclipse和ESP82666的Arduino开发环境,现在开始…