代码是出自李兴华的<<java开发实战经典>>
但看到这里我就晕了
当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父类方法被子类重写时调用子类方法.(解释情形二).
原来是这样的. 如果有不正确或者理解偏了之处 ,尽请留言指正.
原文:http://blog.csdn.net/a8887396/article/details/19333997