java吧 关注:1,261,271贴子:12,760,111
  • 2回复贴,共1

初学者求问覆写与否的方法调用问题

只看楼主收藏回复

在看Java开发实战经典的时候看到覆写一部分,大致代码如下:
public class Hello
{
public static void main(String[] args)
{
new Student().fun();
}
}
class Person
{
private void print()
{
System.out.println("Person");
}
void fun()
{
this.print();
}
}
class Student extends Person
{
public void print()
{
System.out.println("Student");
}
}
这时候子类Student的print不算覆写了父类Person的print,这时候fun()调用的是父类的print输出”Person"。但是一旦去掉父类print的private访问权限,使得子类的print覆写了父类的print,这时候就调用了子类的print输出”Student“了。
这一块内容我作为初学者表示很难理解:
1. 如果父类的print有private访问权限,我可以这么理解,new Student().fun()在子类中没找到fun(),然后到父类中找到了,这时候this指向父类,所以this.print()调用的是父类的print()从而输出了“Person"。但是这种理解在去掉private访问权限后的情况中又说不通了。
2. 如果父类的print没有private访问权限,我可以这么理解,子类继承了父类的fun(),所以调用Student().fun()就直接调用了子类的fun(),这时候this指向子类,所以直接调了子类的print()输出”Student"。但是这样理解在private访问权限有的情况下又说不通了。
有没有大神能解释一下这两种情况怎么理解啊?我百度了一下有说是动态绑定的原因,但是我稍微看了下也没有把动态绑定讲清楚的。还是理解不能啊。


IP属地:浙江1楼2014-12-28 16:55回复
    有没有大神能帮帮我解释一下?


    IP属地:浙江2楼2014-12-29 13:03
    回复
      2025-05-26 09:47:42
      广告
      父类中print()方法加private后,private 方法不能覆写,因此子类中的print()是一个独立的方法,不再是覆写父类的print方法。fun()调用的就只能是person 类中的print()。我的理解,我是超级新手,不知道对不对。


      IP属地:上海3楼2014-12-31 23:28
      回复