浅谈java继承中是否创建父类对象
发布时间 - 2026-01-11 01:57:54 点击率:次1.

调用父类构造方法是真的,但是根本没有创建父类对象,只不过是调用父类构造方法来初始化属性。
如果说调用父类构造方法就等于创建父类对象,那就真的无稽之谈。
new指令开辟空间,用于存放对象的各个属/性引用等,反编译字节码你会发现只有一个new指令,所以开辟的是一块空间,一块空间就放一个对象。
然后,子类调用父类的属性,方法啥的,那并不是一个实例化的对象。
在字节码中子类会有个u2类型的父类索引,属于CONSTANT_Class_info类型,通过CONSTANT_Class_info的描述可以找到CONSTANT_Utf8_info,然后可以找到指定的父类啊啥的。
你的方法啊,属性名称都是在这个上面解析出来的,然后实际变量内容存储在new出来的空间那里。。。
super这个关键字只不过是访问了这个空间特定部分的数据(也就是专门存储父类数据的内存部分)。。。。。。
默认的hashcode和equals(直接使用的==比较)都是一样的,所以,这根本就在一个空间里,也不存在单独的出来的父类对象。
如果说子类可以强行转换成父类进行使用,那是因为java虚拟机有个静态类型(外观类型)和实际类型的概念。
如Object t=new Point(2,3);
那么Object属于静态类型(外观类型),Point属于实际类型。
静态类型和实际类型在程序中都可以发生变化,区别是静态类型的变化仅仅发生在使用时发生,而变量本身的静态类型不会改变,并且最终的静态类型是在编译期间可知的;而实际变量类型的变化结果只有在运行期间才能被确定,编译器在编译的时候并不知道变量的实际类型是什么。
2.
java对象的内存布局是由对象所属的类确定。也可以这么说,当一个类被加载到虚拟机中时,由这个类创建的对象的布局就已经确定下来的啦。
Hotspot中java对象的内存布局:
每个java对象在内存中都由对象头和对象体组成。
对象头是存放对象的元信息,包括该对象所属类对象Class的引用以及hashcode和monitor的一些信息。
对象体主要存放的是java对象自身的实例域以及从父类继承过来的实例域,并且内部布局满足由下规则:
规则1:任何对象都是8个字节为粒度进行对齐的。
规则2:实例域按照如下优先级进行排列:长整型和双精度类型;整型和浮点型;字符和短整型;字节类型和布尔类型,最后是引用类型。这些实例域都按照各自的单位对齐。
规则3:不同类继承关系中的实例域不能混合排列。首先按照规则2处理父类中的实例域,接着才是子类的实例域。
规则4:当父类中最后一个成员和子类第一个成员的间隔如果不够4个字节的话,就必须扩展到4个字节的基本单位。
规则5:如果子类第一个实例域是一个双精度或者长整型,并且父类并没有用完8个字节,JVM会破坏规则2,按照整形(int),短整型(short),字节型(byte),引用类型(reference)的顺序,向未填满的空间填充。
以上就是java对象的内存布局的规则。
接下来说一下java对象的实例化方法,也就是常见的<init>方法。
当我们new一个对象时,其实jvm已经把这个对象的整个空间已经分配好,并且整个对象的实例域布局已经确定下来啦。
实例化方法<init>就是将对象实例域的值设置到相应空间中。
<init>方法以调用父类的<init>方法开始,以自身构造方法作为结束。实例域的声明与实例初始化语句块的位置关系会影响编译器生成的<init>方法的字节码顺序。
还是以一个例子说明一下:
class Parent {
private short six;
private int age;
}
class Sub extend Parent{
private String name;
private int age;
private float price;
}
当前Sub对象的内存布局由下:
super所谓的父类存储空间的表示到底是什么意思?
这里的super存储我想就是绿色的那个位置吧!
以上这篇浅谈java继承中是否创建父类对象就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# java继承
# 父类对象
# 详解Java引用类型的参数也是值传递
# Java中四种引用类型详细介绍
# JAVA中值类型和引用类型的区别
# Java继承extends与super关键字详解
# Java 从json提取数组并转换为list的操作方法
# Java教程之引用类型数组和继承的意义详解
# 子类
# 整型
# 的是
# 都是
# 是一个
# 有个
# 第一个
# 给大家
# 如果说
# 可以找到
# 类中
# 由下
# 我想
# 也不
# 是在
# 就在
# 在这个
# 也就
# 才是
# 只不过是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用PHP快速搭建CMS系统?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
怎么用AI帮你为初创公司进行市场定位分析?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
昵图网官网入口 昵图网素材平台官方入口
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
七夕网站制作视频,七夕大促活动怎么报名?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
浅谈redis在项目中的应用
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
如何快速查询域名建站关键信息?
Android实现代码画虚线边框背景效果
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
如何用y主机助手快速搭建网站?
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
大同网页,大同瑞慈医院官网?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
使用C语言编写圣诞表白程序
如何在腾讯云服务器快速搭建个人网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
如何用PHP快速搭建高效网站?分步指南
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
JS经典正则表达式笔试题汇总
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
C#如何调用原生C++ COM对象详解
EditPlus 正则表达式 实战(3)
*服务器网站为何频现安全漏洞?
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
EditPlus中的正则表达式 实战(2)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
网站制作企业,网站的banner和导航栏是指什么?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何在阿里云虚拟服务器快速搭建网站?
Laravel怎么使用Intervention Image库处理图片上传和缩放
Android仿QQ列表左滑删除操作
如何在IIS中新建站点并配置端口与物理路径?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
网站制作大概多少钱一个,做一个平台网站大概多少钱?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
南京网站制作费用,南京远驱官方网站?

