首页 > 其他 > 详细

记今天把我绕晕的代码: 继承覆盖多态this

时间:2014-02-18 02:11:23      阅读:376      评论:0      收藏:0      [点我收藏+]

代码是出自李兴华的<<java开发实战经典>> 

但看到这里我就晕了


bubuko.com,布布扣



当Person中的print因为是private权限而没被覆盖时 打印Person->>print ,当改成默认权限被覆盖时,打印Student->> print .

我就去百度知道上提问了:

http://zhidao.baidu.com/question/1603770456429560027.html?quesup2&oldq=1

有个人给我解释说: 

this关键字指的是当前对象,person中的print()是private的,不被子类继承的,子类中的print()和它无关,new Student().fun() 后,fun()方法子类中没有,会到person中找,person中有,执行person中的this.print()方法,此时当前的this当然是person,它在调用print()时,print是private的,不会被子类重写,所以打印persong----....... 当改person中的print()权限private为public后,执行到this.print()时,调用子类print() print()被重写,这是父类引用指向子类对象,打印就是子类的print().

我对他的回答的理解是:

this是一个地址指向当前对象.Person中的shis其实是(Person)this , Student中的this其实是(Student)shis.
父类fun中的this->print() 其实可以看做是Person p=new Student(); p->print();
这是一个向上转型
根据多态特性:
1父类只能调用父类中定义的方法.
2父类方法只能在父类中定义而子类中没有重写的时候调用. (解释情形一)
3父类方法被子类重写时调用子类方法.(解释情形二).


原来是这样的. 如果有不正确或者理解偏了之处 ,尽请留言指正.





记今天把我绕晕的代码: 继承覆盖多态this

原文:http://blog.csdn.net/a8887396/article/details/19333997

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!