JAVA的多态中一道题目的问题答案有点疑惑( 二 )
■网友
关于题主的这个题目,需要理解以下几点多态(动态绑定):在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 原来父类对象中方法的地址指向自己的方法,当父类引用指向new子类对象的过程时指针会发生改变,父类对象中方法的指针从指向自己的方法变成指向new对象对应类中重写的那个方法(如图绿色箭头)。父类引用指向子类对象:所能看到的只是父类那部分属性和方法针对此题话内存分析图解释:
说明:变量a2虽然指向B对象,但是它真真实实看得到的只是A类对象属性和方法。刚开始A对象中show(A)地址指向的是A类的方法,当把B类对象的地址赋给a2(多态)的时候,A对象中show(A)地址指向会变化会变化,从而指向B类中的重写以后的show(A)方法,如图:
代码解释:
System.out.println(a2.show(b));
把B对象地址b给了A对象中A类型的变量obj,执行对应方法(如图绿箭头指向)的方法体;输出是:B and A
因为子类引用不能指向父类,所以不是把地址b给A对象中D类型的变量obj。
System.out.println(a2.show(c));
同上。
System.out.println(a2.show(d));
把D对象地址d给了A对象中D类型的变量obj,执行A对象自己的show(D obj)方法体;输出结果是:A and D
推荐阅读
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 27岁,转行java的血与泪,该何去何从
- 怎样统计工程中未使用的java类
- 新互联网网站用Java还靠谱么对比Php,Python,Ruby的话
- 我想学java和安卓软件开发?
- 学计算机专业,java那些和网站开发选台式还是笔记本好
- JAVA设计思路
- 本人大专毕业一年,想要去培训,定了JAVAEE和安卓两个方向,应该学那个纠结,求帮助
- 从未接触过软件测试和java,可以学习主要是自学这两种其一吗
