猿问

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”?

青春有我
浏览 684回答 3
3回答

眼眸繁星

我自己已经在知道了。主类中Student的实例,调用printPetson方法是不能调用Student自己的getInfo方法的,因为getInfo方法是私有方法,不能直接调用。 而父类Person的GetInfo方法虽然是私有的,但是通过其公共的printPerson方法可以直接访问。 所以Student的实例调用printPerson方法,会调用与此方法同属一个类的私有getInfo方法。

陪伴而非守候

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

慕标5832272

新手中的新手,自己new两次,而只有父类打印
随时随地看视频慕课网APP

相关分类

Java
我要回答