最易理解的一种方式是,创建对象时先实例化父类对象,然后实例化子类对象,将父类对象引用当做子类对象的属性赋值给子类对象。而这个属性名称当简单理解为super(隐式的对象组合?)
创建有父类的子类的对象时,是不是在内存中会创建2个对象,一个指向子类一个指向父类?
为了验证这种假设,以下为根据<深入理解java虚拟机>而得来的理解
对于只需要应用这种特性的开发人员来说,这种解释比较简单
而实际到底是怎样的呢?
这种继承关系可以从2个方面解释
一是类的继承关系
二是是当创建子类对象时,这种关系在内存中是如何实现的
1.类的继承关系
在<深入理解java虚拟机>,讲到Class类文件的结构,其结构中包含了这里讲到的继承关系
this_class
super_class
interfaces
这里的super_class存储的就是该类的父类,所以jvm硬编码实现了这种继承特性。通过super_class可以找到父类的全量名
字段表集合:
字段表集合中不会列出从超类或者父接口中继承而来的字段,但有可能列出原本java代码之中不存在的字段,譬如在内部类中为了保持对外部类的访问性,会自动添加指向外部类实例的引用 p178
方法表集合:与字段表集合相对应的,如果父类方法在子类中没有被重写,
方法表集合中就不会出现来自父类的方法信息
2.这种继承关系在对象中是如何体现的?(隐式的组合?)
<深入理解java虚拟机>中讲到,对象在内存中(堆)分为3块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)
对象头中(Header)与继承关系有关的就是类型指针,
通过该指针查找其类元数据的指针。而通过instanceof运算符时,可判断是否为父类实例,我想这里是通过类的继承关系super_class来判断的,而不是通过对象来体现父子关系的
实例数据(Instance Data)
<深入理解java虚拟机>中讲到,无论是从父类继承下来的,还是在子类中定义的,都需要记录在实例数据模块中。
这里有2个解释:
一种是创建了父类的副本
可以理解为创建子类对象时,父类中对象的变量也会在子类中创建一个相同的副本,这2份变量创建完之后,应该是没有关系了,互不影响(符合以上隐式组合的假设)
第二种解释:
这些变量就是父类的变量,super指向的变量就是这部分变量(并没有创建父类对象实例)
通过从其他文章或论坛得到的信息,这里偏向第二种解释。
那super.方法名该怎么解释呢,通过类文件结构中super_class来找到方法?
<深入理解java虚拟机>中并没有显式讲到this super是什么?
参考:
java中,创建子类对象时,父类对象会也被一起创建么?
https://www.zhihu.com/question/51920553
java 的继承原理
http://blog.csdn.net/tangtang5156/article/details/44218919
从原理来理解继承关系的类初始化和实例化的顺序:
https://my.oschina.net/xpbug/blog/111371
分享到:
相关推荐
- **Layout**: 日志格式化器,定义了日志消息的布局方式,即日志消息以何种形式展示。 #### 三、如何配置 Logger 和 Appender **配置示例**: ```xml ``` **解析**: 1. 配置了...
它在页面性能优化中有何作用? **keep-alive** 是Vue.js内置的一个组件,它可以缓存不活动的组件实例,而不是销毁它们。这有助于提高用户体验,尤其是在频繁切换页面的情况下。 #### 27. 如何在Vue.js中处理列表...
2023年大数据面试题剖析.doc
矢量边界,行政区域边界,精确到乡镇街道,可直接导入arcgis使用
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
2023年计算机2级CCT2photoshop考试习题.doc
2023年自考自动化制造系统数控铣削.doc
2023年广东省计算机等级考试二级笔试试卷VB最新考试试题库.docx
2023年新版计算机考试试题及答案.docx
GSM和CDMA数字蜂窝移动通信系统介绍.pptx
考虑电流互感器饱和特性时的建模与仿真 本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换)
内容概要:本文深入探讨了欧姆龙NJ系列PLC在模切机项目中的应用,重点介绍了十二轴EtherCAT总线伺服运动控制和张力控制系统的设计与优化。文章首先讲解了运动控制部分,包括轴使能、回零操作、加减速曲线配置以及凸轮追剪功能的实现。接着讨论了张力控制中的PID调节、卷径计算及其滤波处理方法。此外,还涉及了纠偏控制中的模拟量处理和抗干扰措施。文中强调了模块化编程的重要性,并分享了许多实战经验和调试技巧。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程、伺服控制和张力控制感兴趣的读者。 使用场景及目标:适用于希望深入了解PLC编程、伺服运动控制和张力控制原理的专业人士。目标是帮助读者掌握复杂的多轴联动系统设计,提高故障排查能力和系统优化水平。 其他说明:文章不仅提供了详细的代码示例,还分享了作者在实际项目中积累的技术心得和解决方案,有助于读者更好地理解和应用于实际工作中。
本书旨在教育读者理解人工智能领域的核心算法机制,包括搜索、优化和学习。作者通过十个经典问题,展示了如何应用这些基本算法来解决实际问题。书中不仅提供理论知识,还通过实例教授读者如何选择和实现适当的算法。本书适合初学者和资深从业者,旨在帮助他们区分和选择适合特定问题的算法。书中包含的十个问题涵盖了滑动拼图、最短路径、数独、四子棋、俄罗斯方块、贪吃蛇、垃圾邮件识别、信贷规则、新闻分类和动物识别等。作者Hugues Bersini和Ken Hasselmann分别来自布鲁塞尔自由大学和ECAM,他们在人工智能领域有着丰富的教学和研究经验。
2023年春北交计算机安全与保密在线作业二.doc
matlab
万年历,真的很好内含原理图和原程序代码.zip
内容概要:本文详细介绍了WinCC嵌入式Excel报表系统的功能和优势。该系统利用VBS脚本和Excel模板相结合的方式,能够直接从WinCC的变量归档库中读取数据并生成高质量的报表。文中展示了多种实用的代码示例,如读取历史数据、处理不同类型的统计数据(实时值、平均值、累计值)、以及将Excel控件嵌入WinCC界面的方法。此外,还讨论了如何通过模板机制灵活定制报表样式,确保数据质量和异常处理的有效性。系统不仅支持多版本兼容,而且降低了学习门槛,使得即使是初学者也能轻松上手。 适合人群:从事工业控制系统开发与维护的技术人员,尤其是那些需要频繁处理报表任务的工程师。 使用场景及目标:适用于需要从WinCC系统中提取和展示数据的各种场合,如生产数据分析、设备监控等。主要目标是提高工作效率,减少人工干预,提升数据处理的准确性和及时性。 其他说明:该系统的优势在于其易用性和灵活性,用户可以通过简单的模板修改来满足不同的报表需求,同时保持良好的性能和稳定性。
内容概要:本文档详细介绍了一项基于白鲸优化算法(BWO)优化卷积神经网络(CNN)和双向门控循环单元(BiGRU),结合注意力机制的时间序列预测项目。该项目旨在通过BWO优化CNN-BiGRU模型的超参数,提升模型的预测精度和泛化能力。项目涵盖了从数据预处理、模型构建、优化、训练到评估的全流程,并提供了详细的代码示例。模型通过CNN提取局部特征,BiGRU捕捉时间序列的长短期依赖,注意力机制聚焦关键时刻,BWO优化算法则确保模型参数的全局最优解。项目还讨论了如何应对时间序列预测中的非线性问题、过拟合、参数优化困难等挑战,并提出了相应的解决方案。 适合人群:具备一定机器学习和深度学习基础的研发人员,尤其是对时间序列预测感兴趣的从业者和技术爱好者。 使用场景及目标:①适用于金融、气象、能源、交通、医疗等多个领域的预测任务;②通过优化模型结构和参数,提升预测精度和泛化能力;③结合注意力机制,增强模型对时间序列中关键特征的关注;④通过BWO优化算法,避免局部最优解,确保模型参数的全局最优。 其他说明:项目不仅提供了详细的理论背景和技术细节,还包括了完整的代码实现和GUI设计,方便用户直接应用和扩展。此外,项目还探讨了未来改进的方向,如增强模型的可解释性、多模态数据融合、在线学习功能等,以进一步提升模型的实用性和适应性。
单片机开发是嵌入式系统开发的重要部分,通常用于控制硬件设备。以下是一个基于 **8051 单片机** 的简单例子,展示如何通过按键控制 LED 灯的亮灭。 --- ### **示例:按键控制 LED** #### **功能描述** - 使用一个按键连接到单片机的输入引脚。 - 按下按键时,LED 灯点亮;松开按键时,LED 灯熄灭。 - 通过单片机的 GPIO(通用输入输出)接口实现。 --- ### **硬件连接** 假设使用的是 8051 单片机,硬件连接如下: 1. **按键**: - 一端连接到单片机的 P1.0 引脚(作为输入)。 - 另一端接地。 - 在按键和 P1.0 引脚之间连接一个上拉电阻(例如 10kΩ),以确保未按下时引脚为高电平。 2. **LED**: - 正极连接到单片机的 P2.0 引脚(作为输出)。 - 负极通过一个限流电阻(例如 220Ω)接地。 --- ### **代码实现** 以下是使用 C 语言编写的程序代码: ```c #include <reg51.h> // 包含 8051 单片机的寄存器定义 sbit BUTTON = P1^0; // 定义按键连接到 P1.0 sbit LED = P2^0; // 定义 LED 连接到 P2.0 void delay(unsigned int time) { unsigned int i, j; for (i = 0; i < time; i++) { for (j = 0; j < 120; j++); // 简单延时函数 } } void main() { while (1) { // 主循环 if (BUTTON == 0) { // 检测按键是否按
该资源为joblib-1.3.0-py3-none-any.whl,欢迎下载使用哦!