2018-01-05 · 百度知道合伙人官方认证企业
尚学堂科技有限公司
北京尚学堂科技有限公司是一家从事JAVA、大数据、web前端、网络在线教育、互联网架构师、Android、ios技术开发、咨询为一体的软件公司。公司由海外留学人员和国内IT人士创建。
向TA提问
关注
展开全部
题主这个问题涉及到多态也就是动态绑定问题,下面分析:
首先说明以下知识点:
动态绑定(多态):在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
父类引用指向子类对象,但是父类引用所能看到的只属于父类那部分属性和方法。此过程还存在指针指向变化情况,从指向原来自己方法变化到指向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访问,改变一个不影响另一个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询