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

看板java作者 (minGW128)時間10年前 (2014/09/02 13:01), 10年前編輯推噓0(005)
留言5則, 3人參與, 最新討論串1/1
各位好: 最近在課本上看到一個範例,自己試著打了一下 對於最後的結果有些疑,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()呢? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.228.159 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1409634083.A.29A.html

09/02 13:03, , 1F
private不會被繼承所以不會被override
09/02 13:03, 1F
嗯嗯這我知道,但是我還是不了解 為什麼new Student().printPerson(),printPerson()會去呼叫getInfo() 為什麼不會呼叫Studnet自己定義的getInfo() 而會去呼叫到superclass Person內的getInfo() ※ 編輯: minGW128 (220.136.228.159), 09/02/2014 13:06:58

09/02 14:17, , 2F
不可見就連繼承都不可能~getInfo是各類別自己專屬的
09/02 14:17, 2F

09/02 16:11, , 3F
從Student的參考呼叫,printPerson()還是Person的
09/02 16:11, 3F

09/02 16:12, , 4F
並沒有複製一份到Student然後改呼叫Student的getInfo()
09/02 16:12, 4F

09/02 21:01, , 5F
有override才有動態繫結
09/02 21:01, 5F
文章代碼(AID): #1K1KyZAQ (java)
文章代碼(AID): #1K1KyZAQ (java)