父类构造函数-子类的实例化过程

例子:

class Fu{Fu()    //构造函数{super();    //默认隐藏show();return;     //默认隐藏}void show(){System.out.println("fu show");}
}
class Zi extends Fu{int num = 8;Zi()   //构造函数{super();    //默认隐藏return;     //默认隐藏}void show(){System.out.println("zi show...."+num);}
}
public class Demo {public static void main(String[] args){Zi z = new Zi();z.show();}
}

运行结果:

内存图解

main函数进栈,然后z new了Zi()对象

new Zi() 对象 准备把类加载进方法区,然后这时发现,这类中,还有一个父类,于是把它们一起加载进方法区

随着类的加载完毕,于是执行new Zi();于是在堆内存开辟了一块空间
num 默认初始化为0

然后执行了 Zi() 里面的构造函数,构造函数进栈

然后执行构造函数里面的内容
里面有个默认的super();执行父类的,刚好我们这里继承了父类,于是父类的构造函数也进栈了

执行Fu类构造函数里面的内容,里面有个show()方法,于是通过this地址找到了堆内存开辟的内存,先是在Zi里面找,发现有show,于是执行.
这也是为什么我们第一个会输出:zi show....0的原因
然后return;结束,然后退栈,然后num就开始显示初始化为8.

这里如果Zi的方法没有叫show()的,那么在找不到的情况下,就会去到Fu里面找
可以自己修改代码测试一下.


Zi里面的构造函数super内容执行完之后,往下执行,然后遇到return;
于是也退栈

全部执行完之后,就把堆内存开辟的内存的地址给到了z,z就指向了它
然后这时执行z.show();也就输出了 zi....show8了.

一个对象实例化的过程

  Person p = new Person();1.JVM虚拟机会读取指定路径下的Person.class文件,并加载进内存并会先加载Person的父类(如果有直接父类的情况下).2.在堆内存中开辟空间,分配地址.3.并在对象空间中,对对象中的属性进行默认初始化.4.调用对应的构造函数进行初始化5.在构造函数中,第一行会先调用父类中的构造函数进行初始化6.父类初始化完毕后,再对子类属性进行显示初始化.7.在进行子类构造函数的特定初始化8.初始化完毕后,将地址赋值给引用变量

JAVA面向对象中继承子父类构造函数-子类的实例化过程-图解相关推荐

  1. JAVA面向对象中继承的子父类成员函数的内存图解,以及成员函数中的覆盖的应用.

    JAVA中继承子父类成员函数的使用 我把成员函数理解为就是类里面的功能,或者说是方法. 子父类的成员函数调用可以是这样的 例如: class Fu{void show1(){System.out.pr ...

  2. C++中继承的父类与子类的关系

  3. php继承时父类与子类构造函数的优先问题

    php类在继承时父类与子类构造函数的优先问题可以归纳如下: 父类有构造函数,子类没有,在实例化子类时,会调用父类构造方法, 父类有构造函数,子类也有,在实例化子类时,会调用子类构造方法, <?p ...

  4. Java面向对象(继承、抽象类)

    面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...

  5. java面向对象——包+继承+多态(一)

    文章目录 包(package) 概念: 创建包 注意事项: 导入包中的类: 直接导入 import语句导入 注意事项: 静态导入(了解即可) 包的访问权限 常见的系统包 继承 继承的语法规则 注意要点 ...

  6. 8-2:C++继承之父类和子类对象赋值转换(公有继承)也即切片

    父类和子类对象赋值转换(公有继承) - - - 父类和子类对象赋值转换是指:子类对象可以赋值给父类对象(父类的指针或引用也可以),而父类对象不能赋值给子类对象.也就Student一定是Person,但 ...

  7. Java中List的父类与子类如何转换

    A是B的子类,但List不是List的子类.所以想直接转换是不行的. 一.子类转父类 List<A> childList = getxxxxxx; List<B> dadLis ...

  8. (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)

     目录 :        24 ). 面向对象(聚集关系) 25 ). 面向对象(子父类中变量的特点) 26 ). 面向对象(子父类中函数的特点-覆盖) 27 ).  面向对象(子父类中构造函数的特点 ...

  9. Java面向对象之继承

    继承: 1.提高了代码的复用性 2.让类与类之间产生了关系,有了这个关系,才有了多态的特性 Java语言中:java只支持单继承,不支持多继承(同时继承) 因为多继承容易带来安全隐患,当多个父类中定义 ...

  10. Java面向对象中的注意事项

    关于Java面向对象编程,不可能是一开始就全部学完的,他会伴随着你的Java编程的整个过程,在以后的学习或者工作中,你才能够越来越深入的去理解面向对象这个思想.Object Oritended Pro ...

最新文章

  1. 深度学习(3)基础3 -- 前向传播与反向传播
  2. 【转】ABP源码分析三十一:ABP.AutoMapper
  3. linux下qt实现vlc视频播放器,Qt封装本地视频播放器(VLC二次开发)
  4. [转载] Java单例模式与构造器私有化
  5. CGI,FASTCGI,PHP-CGI,PHP-FPM 概念
  6. 【学习笔记】尚硅谷大数据项目之Flink实时数仓---DWD和DIM
  7. onlyoffice开发java_OnlyOffice功能及演示
  8. Nreal招聘|SLAM算法、深度学习算法、服务器开发工程师等多个岗位
  9. Nacos注册中心AP架构源码(Distro)上篇
  10. 电子计算机上的off是什么意思,计算器上off是什么意思
  11. 易基因 | 项目文章 | oxBS-seq揭示了宫颈癌发生过程中的表观遗传特征变化
  12. openresty-lua代码的语法检查
  13. Isabelle定理证明器
  14. 《2021中国开源发展蓝皮书》发布——中国开源接近世界先进水平
  15. 抓包工具wireshark和Fiddler的使用
  16. scroll-view 下滑列表加载的使用
  17. day-44(2)mysql
  18. cassandra日常维护之nodetool repair
  19. 儿童护眼灯怎么选?2022年好用的儿童护眼台灯推荐
  20. bug难免,但规避bug的五大方式你看了吗!

热门文章

  1. 6. lcd驱动1-硬件原理
  2. 远程线程注入技术 屏蔽ctrl+alt+del
  3. oracle 建表id自增长_oracle建表设置主键自增
  4. linux安装英特尔AX200网卡驱动
  5. html图片自动跳转,点击图片跳转链接(html点击图片跳转链接)
  6. 在条码打印软件中如何绘制圆形
  7. STM32F207通过FSMC读取ADC数据
  8. win10 下mysql环境变量配置
  9. DSkin的TabControl在设计视图报错
  10. 【超图+CESIUM】【基础API使用示例】30、超图|CESIUM -【坐标转换】世界坐标转屏幕坐标