Re: [問題] 請問有關於head first java書上程式碼ꨠ…
※ 引述《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