[問題] 繼承不同package類別 的 方法可見度?

看板java作者 (skipeco)時間11年前 (2014/03/16 16:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
最近看到這個頁面79題: http://yaya741228.pixnet.net/blog/post/86130644 下方的回應有人提到: 原題中 packageB.XMLMessage 的 getText() 因為可見度的關係,並不是也沒有複寫父類別 packageA.Message 的同名 getText()。所以若將原題 System.out.println(new XMLMessage().getTxt()); 換置成 Message msg = new XMLMessage(); System.out.println(msg.getText()); 會編譯錯誤 小弟用Eclipse實驗的結果,確實跳出可見性錯誤 "The method getText() from the type Message is not visible" ---------- 問題是:如何使換置後的版本編譯成功? 小弟原以為: 將 兩個 getText() 都改為 protected 並在 XMLMessage.java import packageA.* 應該就有足夠的可見度了 但實驗結果卻是: 只改成 protected 仍會出現可見性錯誤, 必須要改成 public 才能正確執行 --------- 可是,不是 protected 即足以使不同 package 的子類別使用父類別的方法了? 為何此處一定要設定到public呢? -------------- (附上小弟無法成功編譯的兩檔案--兩個getText()改成public即可成功) Message.java package packageA; public class Message { protected String getText(){return "aaa";} } XMLMessage.java package packageB; import packageA.*; public class XMLMessage extends Message { protected String getText(){return "<msg>text</msg>";} public static void main(String[] args) { Message msg = new XMLMessage(); System.out.println(msg.getText()); } } -------------- 麻煩各位先進指引迷津了 m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.60.172
文章代碼(AID): #1J9MRtU1 (java)
文章代碼(AID): #1J9MRtU1 (java)