java 动态绑定机制_Java的动态绑定机制

当JVM执行对象的成员方法时,会将方法和当前对象的实际内存进行绑定。

public class TestObject {

public static void main(String[] args) {

A a = new B();

//当JVM执行对象的成员方法时,会将方法和当前对象的实际内存进行绑定。

//动态邦定机制和属性没有关系。

System.out.println(a.getResult());

}

}

class A {

public int i = 10;

public int getResult(){

return i + 10;

}

}

class B extends A{

public int i = 20;

public int getResult(){

//这里i其实有两个值,一个是super.i = 10 ,另一个是this.i = 20,这里用的是this.i = 10。

return i + 20;

}

}

输出结果:40

画图分析内存图:

7690ee97357b

内存分析图

因为B继承了A,所以B中也有getResult()方法,当调用getResult()方法时,因为B和A中都有这个方法,那么到底应该调用哪个里面的getResult()呢?这个时候就用到了Java对象的动态绑定机制: 当JVM执行对象的成员方法时,会将方法和当前对象的实际内存进行绑定。

因为B中有getResult()方法,所以调用的就是B中的方法,所以结果才是40。

动态邦定机制和属性没有关系。

public class TestObject {

public static void main(String[] args) {

A a = new B();

//当JVM执行对象的成员方法时,会将方法和当前对象的实际内存进行绑定。

//动态邦定机制和属性没有关系。

System.out.println(a.getResult());

}

}

class A {

public int i = 10;

public int getResult(){

return i + 10;

}

}

class B extends A{

public int i = 20;

// public int getResult(){

//

// return i + 20;

// }

}

输出结果:20

如上代码所示,当注释掉B中的getResult()方法后,因为B中没有getResult()方法,所以调用的就是A中的getResult()。又因为动态绑定机制和属性没有关系,所以A中相当于是“return this.i + 10”。

this代表的就是当前对象,只不过A中省略了,所以结果是20。

7690ee97357b

内存图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值