java 子类继承父类后,在子类中重复( 不是重写)父类的private方法,所产生的疑问。

对一下代码的输出结果很有疑问。请懂得的人指教。

public class Test {

public static void main(String[] args) {
    new Person().printPerson();
    new Student().printPerson();
}

}

class Student extends Person {

private String getInfo() {
    return "student";
}

}

class Person {

private String getInfo() {
    return "person";
}

public void printPerson() {
    System.out.println(getInfo());
}

}

输出结果是:
person
person


为什么会这样?
Student的实例调用printPerson()方法,为什么没有输出“student”?

阅读 2.6k
3 个回答

我自己已经在知道了。
主类中Student的实例,调用printPetson方法是不能调用Student自己的getInfo方法的,因为getInfo方法是私有方法,不能直接调用。

而父类Person的GetInfo方法虽然是私有的,但是通过其公共的printPerson方法可以直接访问。

所以Student的实例调用printPerson方法,会调用与此方法同属一个类的私有getInfo方法。

嗯 没错 当你student调用时 printperson()时候,jvm 根据invokevirtual 找到了父类的实现。然后调用getinfo时候,此时穿入得this 虽然实际是student 但类型是Person 然后发现是private 直接invokespecial 调用,不用多态了

新手中的新手,自己new两次,而只有父类打印

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题