java中的this


代码编译的时候会将所有的方法编译成 类.方法()的形式正如上述 Demo中 testFun1()方法会被编译成 Demo.testFun1(),并且会将类中的每一个方法(除static之外)编译上一个参数,这个参数是this 类型为方法所在类的类型,比如Demo.testFun1(Demo  this)。

   对于new Demo()实在堆上分配一个具有所有成员变量的(除static变量)一块内存并且初始化为0.这就好比C语言中用malloc函数创建的一个具有int i = 0; int j  = 0; 的结构体,结构体的名字为Demo,返回一个指向分配的内存空间的首地址。

   对于d.testFun1()会解析成 testFun1(d)(包括play 等方法 如上图 ),这就明确了那个对象使用类方法了,这好比C语言中函数调用,只不过传入了一个结构体指针,指明那个对象使用这个方法。

   可以看出,this的强大,帮程序员做了好多事,是的可以仅仅考虑面向对象的设计。


   这个与上述主要区别在于有了继承,其他的过程和上面那个一样。不一样在于 Test()中TestFun()到底调用谁的。  这其实就是一个向上转型的过程。

   Test()参数是Test类型的this 但是dDemo  Test this = d; 这是实际就是基类的引用指向了导出类的对象,那么对于TestFund)调用谁的在于后期绑定机制。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值