关于java成员方法继承内存图

关于java成员方法继承内存图我们还是结合具体代码进行分析:

还是老样子,首先测试类的main()方法和class文件加载到方法区,main()方法被虚拟机调用入栈,执行main方法中第一句代码,将类Zi的字节码文件和成员变量以及方法加载到方法区,有类Zi继承了Fu类,所有Zi类会把Fu类的class文件和成员变量以及方法加载至方法区,同时Fu类继承object类,所以object的class文件也会被加。然后虚方法表中会加载object类中的5个虚方法,接着类Fu继承object的虚方法,同时在将自己的1个虚方法加载如虚方法表中,此时虚方法表中有7个虚方法。

接着执行等号左边,Zi z加载入栈,等号右边在堆内存中开辟一个空间,与之前不同的是,该空间被一分为二,一边加载父类的成员变量,一边则是自己的成员变量,由于父类中和本类中均无变量,所有两侧内存里面为空。对于生成的变量各自赋上初始化值。并将地址赋值给栈中的变量。

接下来,sout(z)则输出的是地址值001,代码继续执行,z.zishow()和fu.show1(),直接在虚方法表中查找该方法,若存在则直接调用,将方法加载到栈中。接着同样方法执行zi.fushow2(),虚方法表没有该方法,则依次查找本类和所有父类的所有成员方法,在fu类中查到该方法,发现是私有成员方法,因此不能调用,系统报错。

什么是虚方法

如下下图

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值