结果为什么是这个?java

结果为什么是这个?java编程... 结果为什么是这个?java编程 展开
 我来答
尚学堂科技有限公司
2018-01-05 · 百度知道合伙人官方认证企业
尚学堂科技有限公司
北京尚学堂科技有限公司是一家从事JAVA、大数据、web前端、网络在线教育、互联网架构师、Android、ios技术开发、咨询为一体的软件公司。公司由海外留学人员和国内IT人士创建。
向TA提问
展开全部

题主这个问题涉及到多态也就是动态绑定问题,下面分析:

首先说明以下知识点:

  1. 动态绑定(多态):在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

  2. 父类引用指向子类对象,但是父类引用所能看到的只属于父类那部分属性和方法。此过程还存在指针指向变化情况,从指向原来自己方法变化到指向new出来对象的方法。

下面针对此题画内存分析图分析并附加解释:

b.m = 20;   修改的是B类的属性,如图。

b.getM(); 是取到B对象自己的方法,输出20+100

A a = b;    此时a指向B对象,但是所能看到的只是父类那部分属性和方法。此过程还发生上 面知识点2中的指针指向变化,如图绿色变变化指向。

a.m = -100;   因为只能看到父类那部分属性和方法,所以修改的是A对象的属性,如图

a.getM();   因为此时指向方法的指针发生给变,所以指向的还是B对象的方法(自然用B的属性),输出还是20+100

匿名用户
2018-01-05
展开全部
非常简单啊,你把子类的m换成n就马上知道答案了,两个相同的m并不带表子类会覆盖掉父类的m,一个用this访问,一个用super访问,改变一个不影响另一个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式