Re: [問題] 請問有關於head first java書上程式碼ꨠ…

看板java作者 (月狼)時間17年前 (2008/07/30 02:13), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ 引述《king19880326 (OK的啦~我都可以接受)》之銘言: : 這是出自head first java 一書 p.255 : 以下是程式碼 : : ------------------------------------------------------------------------- : abstract class Animal{ : private String name; : public String getName(){ : return name; : } // 3. 2就是執行這裡, 而且把傳入的 theName 設定到private的name裡 : public Animal(String theName){ : name = theName; : } : } : class Hippo extends Animal{ // 2. 1就是執行這裡, 而且super(name)會再執行Animal的建構子 : public Hippo(String name){ : super(name); : } : } : public class MakeHippo{ : public static void main(String[] s){ : Hippo h = new Hippo("Buffy") ; // ^^^^^^^^^^^^^^^^^^^^^ 1.會執行Hippo的建構子 : System.out.println(h.getName()); //^^^^^^^^^^^^ 4.會執行Hippo繼承來的Animal的 // public method getName() 所以會印出 Buffy : } : } 以上不知道有沒有解答到?... : -------------------------------------------------------------------------- : 這是執行結果 : : % java MakeHippo : Buffy : 因為 name 這個變數是private的 : 所以不會被 Hippo 繼承下來 : 而getName() 這個 method 因為是public : 所以會被繼承下來 : 也就是說 : 目前的 Hippo 這個 class 只有自己的 constructor 和 getName : (還有 Animal 的 constructor??) ^^^^^^^^^^^^^ 只有Hippo自己的 建構子(但裡面用super呼叫了Animal的) : 那在我的想法裡 getName 應該是看不到 name 這個 variable OTZ ^^^^^^^^^^這裡的 getName 是繼承Animal的~所以可以取得到值 : 目前我提出的解釋是這樣 : : 就是雖然說繼承可以只寫一份程式碼 : 可是本質上還是跟寫在各自的 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: 118.232.57.45
文章代碼(AID): #18Zrt1Ar (java)