看板 java 關於我們 聯絡資訊
這是出自head first java 一書 p.255 以下是程式碼 : ------------------------------------------------------------------------- abstract class Animal{ private String name; public String getName(){ return name; } public Animal(String theName){ name = theName; } } class Hippo extends Animal{ public Hippo(String name){ super(name); } } public class MakeHippo{ public static void main(String[] s){ Hippo h = new Hippo("Buffy") ; System.out.println(h.getName()); } } -------------------------------------------------------------------------- 這是執行結果 : % java MakeHippo Buffy 因為 name 這個變數是private的 所以不會被 Hippo 繼承下來 而getName() 這個 method 因為是public 所以會被繼承下來 也就是說 目前的 Hippo 這個 class 只有自己的 constructor 和 getName (還有 Animal 的 constructor??) 那在我的想法裡 getName 應該是看不到 name 這個 variable OTZ 目前我提出的解釋是這樣 : 就是雖然說繼承可以只寫一份程式碼 可是本質上還是跟寫在各自的 class 不大相同 我記得之前看一本書上說 instance method 都會多傳一個 this 當作是參數 所以我猜測 Animal 這個 class 裡 getName() 可以說是 public String getName(Animal this){ return this.name; } 而 Hippo 這個 class 裡的 getName() 或許就是 public String getName(Hippo this){ return super.getName(this); } 因為有 polymorphism 所以導致仍然看得到 name 這個 variable 不知道我這樣說對不對哩 @@>?? 請大家指教 <(__)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.233.241.84
pinglunliao:這跟 Access Modifiers (private, public) 有關 07/31 08:22
pinglunliao:這範例還稱不上 polymorphism 的應用 07/31 08:24