[問題] private method在subclass內的表現

作者: minGW128 (minGW128)   2014-09-02 13:01:20
各位好:
最近在課本上看到一個範例,自己試著打了一下
對於最後的結果有些疑,po上來問請問一下大家
code:
public class Test {
public static void main(String[] args) {
new Person().printPerson(); // Person
new Student().printPerson(); // Person
}
}
class Student extends Person {
private String getInfo() {
return "Student";
}
}
class Person {
private String getInfo() {
return "Person";
}
public void printPerson() {
System.out.println(getInfo());
}
}
result:
Person
Person
問題:
簡單來說,Student繼承Person,由於printPerson()是public
所以class Student內有繼承到printPerson()
但是getInfo()在Person內是private,所以class Student內沒有繼承到getInfo()
於是class Student內自行定義了一個自己的getInfo()
然後呼叫new Student().printPerson()
printPerson()內會去呼叫getInfo()函數
請問為什麼呼叫的getInfo()函數
不是class Student內自行定義的getInfo()
而是其superclass Person內的getInfo()呢?
謝謝!
作者: ssccg (23)   2014-09-02 13:03:00
private不會被繼承所以不會被override
作者: swpoker (swpoker)   2014-09-02 14:17:00
不可見就連繼承都不可能~getInfo是各類別自己專屬的
作者: ssccg (23)   2014-09-02 16:11:00
從Student的參考呼叫,printPerson()還是Person的並沒有複製一份到Student然後改呼叫Student的getInfo()
作者: future314 (未來π)   2014-09-02 21:01:00
有override才有動態繫結

Links booklink

Contact Us: admin [ a t ] ucptt.com