怎么理解java的多态?

关于多态(动态绑定)见下面具体分析:

首先说明以下知识点:

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

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

以简单程序举例:

classA{intm;publicintgetM{returnm;}publicvoidsetM(intm){this.m=m;}classBextendsA{intm;publicintgetM{returnm+100;}}publicclassE{publicstaticvoidmain(String[]args){Bb=newB;b.m=20;System.out.println(b.getM);// 120Aa=b;a.m=-100;System.out.println(a.getM);// -100}}

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

小编是一个有着5年工作经验的java程序员,对于java,自己有做资料的整合,一个完整学习java的路线,学习资料和工具,相信这里有很多学习java的小伙伴,我创立了一个2000人学习扣群,479121291。每晚都有java的直播课程。无论是初级还是进阶的小伙伴小编我都欢迎!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值