在看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访问权限有的情况下又说不通了。
有没有大神能解释一下这两种情况怎么理解啊?我百度了一下有说是动态绑定的原因,但是我稍微看了下也没有把动态绑定讲清楚的。还是理解不能啊。
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访问权限有的情况下又说不通了。
有没有大神能解释一下这两种情况怎么理解啊?我百度了一下有说是动态绑定的原因,但是我稍微看了下也没有把动态绑定讲清楚的。还是理解不能啊。
