鍍金池/ 問答/Java/ java 子類繼承父類后,在子類中重復( 不是重寫)父類的private方法,所

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

回答
編輯回答
雅痞

嗯 沒錯 當你student調用時 printperson()時候,jvm 根據invokevirtual 找到了父類的實現。然后調用getinfo時候,此時穿入得this 雖然實際是student 但類型是Person 然后發(fā)現是private 直接invokespecial 調用,不用多態(tài)了

2017年9月22日 18:16
編輯回答
離人歸

我自己已經在知道了。
主類中Student的實例,調用printPetson方法是不能調用Student自己的getInfo方法的,因為getInfo方法是私有方法,不能直接調用。

而父類Person的GetInfo方法雖然是私有的,但是通過其公共的printPerson方法可以直接訪問。

所以Student的實例調用printPerson方法,會調用與此方法同屬一個類的私有getInfo方法。

2017年8月8日 13:07
編輯回答
笨笨噠

新手中的新手,自己new兩次,而只有父類打印

2018年5月3日 19:17