java基础之【继承--->多态】内存图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java基础之【继承--->多态】内存图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1732字,纯文字阅读大概需要3分钟。
内容图文
执行流程
1:Animal a = new Cat(); 1.1:在栈中创建区域,类型为Animal,变量名:a; 1.2:在堆中new Cat();占用一块区域。地址值:[0x3a4] 1.3:spuer()实例化父类Animal。 1.3.1:new Animal();占用一块区域,地址值:0x3ab; 1.3.2:引用着在方法区中初始化[Animal中的所有方法,该引用为:[0x754]]。 1.3.3:将Animal()引用赋给spuer();spuer引用着Animal(); 1.4:在方法区中初始化Cat类的所有方法,引用值为0x343。 1.5:将0x3a4赋给栈中的变量a;a就开始引用Cat()。 2:a.eat(); 2.1:通过[0x3a4]找到Cat。 2.2:编译时期:先spuer()找到Animal中的方法。如果没有,则报错。 2.3:运行时:直接在Cat中找到eat(),当Cat中没有,再去Animal中找。 2.4:将eat()方法要方法区压栈,执行,输出:SOP(猫吃鱼); 3:a = new Dog(); 3.1:在堆new Dog(),开辟一块新区域,地址值:0x87xfds 3.2:spuer();实例化父类Animal 3.2.1:new Animal()开辟新区域,地址值0x33fa; 3.2.2:成员方法引用着方法区中已初始化的[0x754]; 3.2.3:将Animal地址值0x33fa赋给spuer();;spuer引用着Animal(); 3.3:在方法区中初始化Dog类的所有方法,引用值为0x422ac。 3.4:将[0x87xfds]赋给栈中的变量a; a不再引用Cat,而是引用着Dog;这时堆中的Cat已成为垃圾,等待JVM空闲时来回收。 4:a.eat(); 4.1:通过a变量引用值找到堆中标记为0x87xfds的区域。 4.2:编译时:先进super();去检查Animal引用的方法区中有没有eat()方法,如有没有则报错。 4.3:运行时:直接去Doa方法区中找到eat();如果Doa没有,再去执行super()调用父类的eat()方法。 4.4:从方法区中将eat()压栈,执行(SOP('狗吃粮'))。 5:a.shudy(); 5.1:通过a变量引用值找到堆中标记为0x87xfds的区域。 5.2:编译时:先进super();去检查Animal引用的方法区中有没有shudy()方法,结果Animal中没有shudy()方法,所以就在编译时期就报错。 6:Dog d = (Dog)a; 6.1:在栈中开辟区域,存储类型为Dog,变量名d 6.2:将a向下转型,从Animal转为Dog来引用Dog;(将a变量赋给d) 6.3:a和d都指向堆中同一个Dog对象。 7:d.eat();//从Dog方法中压栈执行eat()方法,然后弹栈; 8:d.shudy();//从Dog方法中压栈执行shudy()方法,然后弹栈; 9:Cat c = (Cat) a; 9.1:在栈中开辟一块区域,存储类型:Cat,变量名称:c 9.2:将a向下转型,将Anmail引用Dao转为Cat引用Dog;结果抛出类型转换异常。Dog不能被转为Cat;
多态】内存图,布布扣,bubuko.com' ref='nofollow'>java基础之【继承--->多态】内存图,布布扣,bubuko.com
多态】内存图' ref='nofollow'>java基础之【继承--->多态】内存图
原文:http://blog.csdn.net/hubiao_0618/article/details/38523281
内容总结
以上是互联网集市为您收集整理的java基础之【继承--->多态】内存图全部内容,希望文章能够帮你解决java基础之【继承--->多态】内存图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。