JAVA 多态(运行时多态和编译时多态)及其内存图解

Java知识体系!java多态向上转型内存图解 Redis主从复制 概念 Redis的主从复制概念和MySQL的主从复制大概类似。一台主机master,一台从机slaver。master主机数据更新后根据配置和策略,自动同步到slaver从机,Master以写为主,Slave以读为主。 主要用途 读写分离:适用于读多写少的应用,增加多个从机,提高读的速度,提高程序并发 数据容灾恢复:从机复制主机的数据,相当于数据备份,如果主机数据丢失,那么可以通过从机存储的数据进行恢复。 高并发、高可用集群实现的基础:在高并发的场景下,就算主机挂了,从机可 阅读详情

定义:某一类事物的多种存在方式(一个对象,两种形态)

对象的多态:父类或者接口的引用指向其子类的对象

多态的好处:

提高了代码的扩展性,前期定义的代码可以使用后期的内容

多态弊端: 前期定义的内容不能使用(调用)后期子类的特有方法(就是多态调用的只能是父类)。但如果是继承子类覆盖了父类方法,多态调用的仍是子类的方法!

多态前提:

1、必须有关系(继承、实现)

2、要有覆盖

多态实际上是自动类型提升:

Animal a = new cat(); ( cat型自动提升为Animal型(向上转型,得按Animal对象进行操作),因此cat只能调用Anima类中的方法,cat中特有功能无法访问 )。如果还想用猫的特有功能,可以强制向下转型:Cat c = (Cat) a。向下转型是为了使用特有方法。如果两者不具备继承关系不能强制转换!(向上转型为了提高扩展性并限制特有方法,向下转型为了使用特定方法)。对于转型自始至终都是子类对象做着类型的变化:

尽管f是指向Zi()这个对象,但是实际运行依然是Zi()这个对象调用方法。因此会先去方法区Zi()这个空间中去找方法。若ZI()方法区中没有则会去找Fu()方法区,再去堆中找相对应的变量。若没有则在往上找,直到Object类。这其实就是运行时多态,即到底运行Fu()的方法还是Zi()的方法等到程序运行时再去确定。对于多态时的成员函数,总的来说分为三种情况:

1、父类有方法,子类有覆盖方法:编译通过,执行子类方法。

2、父类有方法,子类没覆盖方法:编译通过,执行父类方法(子类继承)。

3、父类没方法,子类有方法:编译失败,无法执行。

方法带final、static、private时是编译时多态,因为可以直接确定调用哪个方法。

 

覆盖与隐藏:

以下来自:https://www.cnblogs.com/it12345/p/5221673.html

隐藏 :child隐藏了parent的变量和方法,那么,child不能访问parent被隐藏的变量或者方法,但是,讲B转换成A中,可以访问A被隐藏的变量或者方法

覆盖 :child覆盖了parent的变量或者方法,那么,child不能访问parent被覆盖的变量或者方法,将child转换成parent后同样不能访问parent被覆盖的变量或者方法

 

首先看一下JAVA中方法和变量在继承时的覆盖和隐藏规则

1.父类的实例变量和静态变量能被子类的同名变量隐藏

2.父类的静态方法被子类的同名静态方法隐藏

3.父类的实例方法被子类的同名实例变量覆盖

 

还有几点需要注意的是:

1.不能用子类的静态方法隐藏 父类中同样标示(也就是返回值 名字 参数都一样)的实例方法

2.不能用子类的实例方法覆盖 父类中同样标示的静态方法

3.这点儿请注意,就是变量只会被隐藏 不会被覆盖 ,无论他是实例变量还是静态变量,而且,子类的静态变量可以隐藏 父类的实例变量,子类的实例变量可以隐藏 父类的静态变量

下图结果为3就是因为zi自动转换为Fu类,在zi这个实例的堆内存中找到Fu类num的值。覆盖只发生在函数上!

 

instance of: 

格式:引用  instance of  类/接口

如果给Animal传入了一只狗但是Animal需要转换成猫,这是就会发生错误。因此需要使用instance of来判断传入的引用类型。instanceof 用于判断对象的具体类型,只能应用于引用数据类型判断。一般向下转型时加入instance of判断增强代码健壮性。

 

多态成员特点:

 

 

 

 

 

手把手教你用WKT文件在Petrel中创建自定义坐标系统(附CGCS2000转换模板) 本文详细介绍了如何在Petrel软件中利用WKT文件创建自定义坐标系统,并重点提供了CGCS2000坐标系的完整转换模板与实战步骤。通过解析坐标系统的三大支柱(大地坐标系、投影坐标系、基准转换)和WKT文件结构,指导用户从零开始构建适用于本土化项目的坐标系统,确保地质建模与空间数据处理的精度与一致性。 阅读详情

相关推荐

软件各项会议评审意见模版

读梅老师主编的书,觉得评审意见模板很有参考价值和实用价值,帮梅老师安利一波,顺便记一下笔记。 《系统/子系统规格说明》评审意见模板 20XX年XX月XX日,XXX(主管机关)在XXX(会议地点)主持召开了“《XXX(产品名称)系统规格说明》评审会”。参加会议的有XXX机关,XXX院校,XXX研究所共XX名代表(名单见附件1),会议成立了评审组(名单见附件2),听取了XXX(单位)做的《XXXX报告》。经讨论质询,形成评审意见如下: 系统规格说明对系统的研制目标和范围、工作状态、运行方式以及所要满足的能力需

赵星汉同学的博客 1万+

java语言------------多态内存图分析

目录   1.1为什么使用多态,此为没有使用多态的情况 1.2.使用多态的情况是这样 2.1.多态例子练习多态情况下父类的引用不能指向子类特有的成员变量(或成员函数)强制类型转换后可以指向子类对象这时候就需要强制类型转换 3.1多态内存分析 1.1为什么使用多态,此为没有使用多态的情况 package Polymorphism; /** * @author zhao xuk...

boy_of_god的博客 3519

MEME-CHIP实战:5步搞定ChIP-seq数据中的motif发现与可视化

本文提供了使用MEME-CHIP工具进行ChIP-seq数据motif发现与可视化的完整实战指南。通过5个清晰步骤,从数据准备、环境搭建、命令行执行到结果解读与高级可视化,详细讲解了如何利用MEME-CHIP工作流高效完成从原始peak序列到发表级motif图的分析,并分享了关键的参数调优与避坑经验。

alice7model的博客 508

java多线程内存图

1、主方法入栈,并创建两个对象x1,x2(Thread()也在方法区,这里没有画),x1 x2new出来的两个线程对象进入方法区。主线程也创建了w1对象,并调用了他的m1方法。3、创建两个线程栈,栈中有run方法,run方法内分别创建了Person w1对象,并在堆中开辟对象空间。4、w1中调用了m2方法,m2拷贝入栈;另一个w1调用了m3方法,m3拷贝入栈。可能一个线程中的代码执行了两行后又切到了另一个线程了。4.1、m2方法中还调用了m3,m3拷贝入栈。====>这样就说明了,

m0_61982496的博客 511

Unipush2.0 App消息推送(在线+离线推送)

使用unipush2.0进行消息推送,包含在线跟离线

weixin_50251467的博客 3699

解锁Cherry Studio高阶玩法:用MCP实现自动化测试与数据爬取

本文深入探讨了如何利用MCP协议与Cherry Studio结合,实现自动化测试与数据爬取的高阶应用。通过Playwright等工具的MCP集成方案,详细解析了自动化测试流水线构建和智能爬虫系统开发的关键技术,显著提升工程效率和系统适应性。

defi6farmer的博客 275

java基础学习 day43(多态,多态调用成员的特点和内存图)

什么是多态 同类型的对象,表现出的多种形态 多态的表现形式 父类类型 对象名称 = 子类对象; 多态的前提 有继承/实现关系 有父类引用指向子类对象 Fu f = new Zi (); 有方法重写 多态的好处 使用父类作为参数,可以接收所有子类对象 使用父类作为参数,和方法的调用者,可以根据传递对象的不同,调用不同对象的重写后的方法。 体现多态的扩展性和便利

丿罗小黑的博客 359

基于遗传算法的码头泊位分配调度优化问题求解

例如,基因型为 [3, 1, 4, 2] 表示第一艘停靠在第三个泊位,第二艘停靠在第一个泊位,以此类推。同时,该码头有 n 艘船需要停靠,每艘船的货物数量、船长、船宽都不同,需要根据其特性来分配合适的泊位,并确定每个泊位的使用时间,以最大化码头的使用效率。码头的泊位分配调度是一个关键的物流问题,它涉及到船舶的进出港、货物的装卸和存储等多个方面,因此对其进行优化是至关重要的。根据得到的最优个体,可以得到每个泊位停靠的船只、使用时间等信息,从而确定码头的泊位分配调度方案。% 不同船只的货物数量。

uote_e的博客 1075

【笔记】Java的多态概述、父类引用指向子类对象的内存图、多态使用场景及其内存图解、多态中成员变量的使用及内存图解(instanceof关键字的用法)、多态的好处和弊端

文章目录一、多态概述二、父类引用指向子类对象的内存图三、多态使用场景及其内存图解四、多态的好处和弊端 一、多态概述 二、父类引用指向子类对象的内存图 三、多态使用场景及其内存图解 四、多态的好处和弊端 ...

qq_51843109的博客 1475

12S BMS 核心设计:基于 STM32H743+BQ34Z100 的 SOC/SOH 实现与全链路技术解析(上)

本文详细介绍了基于STM32H743和BQ34Z100的12串锂电池管理系统(BMS)设计。该系统采用主控制器+专用电量监测计架构,可实现高精度SOC(±1%)和SOH(±2%)估算,支持36V-50.4V电压范围。硬件设计包括电压/电流采样、温度测量、保护电路等模块,软件实现基于HAL库开发,采用DMA方式提高I2C通信效率。系统通过TI专利的ImpedanceTrack™算法实现三维融合估算,并具备完善的保护功能。该设计适用于电动工具、轻型电动车等中功率设备,具有精度高、响应快。

bother3000的博客 1393

BLDC&PMSM电机控制器硬件设计工程(一)概述&需求&规划

这里是一个专注于电机控制器硬件工程的开放社区与知识仓库。我们的核心使命是分享、交流与共创,致力于解开无刷直流电机(BLDC)和永磁同步电机(PMSM)中、大功率控制器硬件设计,包括驱动IC选型,电流传感器选型,控制IC,母线电容计算,功率模块(IGBT、MOS管)选型以及大功率功率模块驱动电源设计。功率等级: 重点关注中等功率(如500W-10kW) 并向大功率(10kW以上) 延伸,探讨对应的功率器件(如MOSFET, IGBT, SiC)选型与驱动。

小幽余生不加糖 638

Java多态内存分析

*p1虽然是Pet类型的引用,但实际仍然指向Dog,只是操作范围只有从父类继承来的哪些属性或者方法。子类Dog继承了父类的属性a、public say()以及Protected say1(),还有自己的方法cute。2.当用父类的引用p1,操作子类的对象的时候,为什么可以操作复写(override)的Method,怎么知道该Method是子类的而不是父类的?另一方面,所有派生类中继承于基类的方法在方法表中的偏移量跟该方法在基类方法表中的偏移量保持一致这也就是为什么可以准确的调用Method。

m0_47310235的博客 396

【如何学习CAN总线测试】——AUTOSAR网络管理自动化测试(CAPL源码)

上一章介绍的是AUTOSAR网络管理如何测试、用例设计,对于不满足手工测试的同学,本章就介绍AUTOSAR网络管理自动化测试。

测试领域技术分享 6238

java多态内存图_JAVA 多态(运行时多态和编译时多态)及其内存图解

定义:某一类事物的多种存在方式(一个对象,两种形态)对象的多态:父类或者接口的引用指向其子类的对象多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容多态弊端: 前期定义的内容不能使用(调用)后期子类的特有方法(就是多态调用的只能是父类)。但如果是继承子类覆盖了父类方法,多态调用的仍是子类的方法!多态前提:1、必须有关系(继承、实现)2、要有覆盖多态实际上是自动类型提升:Animal ...

weixin_30430677的博客 490

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

图解java多态的原理

通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状 态。(就像榨汁机,放入不同水果得到不同的果汁) 1.对象头的Klass Pointer始终指向的是传入对象的类对象 2.类对象的函数调用表,如果派生类重写了父类的方法,在函数调用表中,派生类方法的引用会覆盖父类方法的引用

weixin_72224952的博客 2601

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

编译时类型和运行时类型到底是什么?

最近在看多态,里面有一句话困扰了我很久,就是 编译时类型和运行时类型 我一直都对这个编译时类型和运行时类型很迷惑,百度了很多讲的都很浅显大都如下: Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。 这样的说法只是简单地描述了编译时类型、运行时类型,并没有真正的从本质上说明什么是编译时类型什么是运行时类

qq_29513537的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

继承和多态的内存图解

今天被继承和多态困扰,在优快云上找了好几个内存分配讲解,个人感觉不全吧,就把他们做了个整合。。。。(讲解的是多态的方法和成员调用和继承中的方法和变量的调用) 什么是多态 // 同一个对象,在不同时刻表现出来的不同形态 多态的前提 // 要有继承或实现关系要有方法的重写要有父类引用指向子类对象 多态的好处和弊端(记忆) 好处 // 提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作 弊端 // 不能使用子类的特有成员 多态成员访问特点 成员变量 :编译看父类,运

Baldy_baby的博客 1291

图解Java多态内存分配以及多态中成员方法的特点

图解Java多态内存分配以及多态中成员方法的特点 Person worker = new Worker(); 子类实例对象地址赋值给父类类型引用变量。多态的体现。 多态中成员方法的特点分析: 【子类有,父类没有】编译失败!!! worker.startWork(); 为什么编译不通过呢?提示:找不到符号。 因为引用变量worker是Person类型,在Person

Thinking_IN_Java 4817

java中多态的内存图解_java多态内存分析实例图解

java多态内存分析。java多态是重要的知识点,我们一定要清楚的,而java多态内存分析相对会比较难,在这里给大家提供了多态的内存分析图实例,希望可以给您带来帮助!定义动物类animal.java作为父类。package cn.bjsxt.oop.polymorphism;public class Animal {String str;public void voice(){System.out...

weixin_32771907的博客 821

Java——多态

接下来简单的实现一个球类信息查看的系统 成员变量:成员方法:优势:1.在多态形式下,右边对象可以实现解耦合,便于扩展和维护举例: 2.定义方法的时候,使用父类类型作为参数,可以接收所有的子类对象,体现多态的扩展性和便利弊端:1.不能调用子类的特有方法解决方案:强制转换,将调用者变回子类类型,转换时不能瞎转,即Animal dog=new Dog();不能将dog转成Cat类型,瞎转会报类型转换异常补充:instanceof关键字

2301_80251684的博客 1285

Java中的多态,抽象类和接口

多态 Java引用变量有两个类型: 编译时类型:由声明该变量时使用的类型决定 运行时类型:由实际赋给该变量的对象决定 如果编译时类型和运行时类型不一致,就可能出现所谓的多态。 多态实际上就是,某一个事物,在不同时刻表现出来的不同状态。或者说,同一个变量,调用同一个方法时呈现出的多种不同的行为特征。 例: Cat c=new Cat(); Animal a=new Ca...

weixin_44824745的博客 295

java中多态的内存图解_(转载)图解Java多态内存分配以及多态中成员方法的特点...

Person worker = new Worker(); 子类实例对象地址赋值给父类类型引用变量。多态的体现。多态中成员方法的特点分析:【子类有,父类没有】编译失败!!!worker.startWork(); 为什么编译不通过呢?提示:找不到符号。因为引用变量worker是Person类型,在Person类的方法表中查找方法startWork(),找得到吗?找不到,更别提常量池解析了。编译失败。...

weixin_29959015的博客 655

Java多态的向上转型——内存分析

Java 向上转型的内存分析

qq_43582566的博客 1503

多态中调用成员的特点

总结:成员变量调用:编译时看左边,运行时也看左边。成员方法调用:编译时看左边,运行时看右边。具体实现示例控制台打印结果:父类成员变量。

2301_79947226的博客 183

Java的多态

​ 同种类型的对象,表现出的不同的形态。

2302_81034736的博客 918

java中多态的内存图解_图解Java多态内存分配以及多态中成员方法的特点

小的总结:再来看这条语句:Person worker = new Worker(): 多态,父类引用指向子类对象。跟这句代码的作用是一样的,Worker w = new Worker(); Person worker = w; 就是子类的引用传给父类类型的引用。向上转型,都指向一个实例对象(子类)。1:为什么可以将子类实例对象的引用传给父类类型引用呢?答:多态的体现,鸽子是鸟类,鹦鹉是鸟类,喜鹊是...

weixin_42500367的博客 408
上一篇: JAVA static关键字
下一篇: BST及其各种操作(C实现)
donCoder
博客等级 码龄9年 65粉丝 79原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值