Re: [問題] 請問一下override的情況

看板java作者 (叔叔你人真好)時間17年前 (2008/05/07 21:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
的而且確是沒有 override Animal.sizeType 的 compiler 在看到 SmallAnimal 再次 declare 一個叫 sizeType 的 variable 時 它只把它當成是一個獨立,屬於 SmallAnimal 的 variable 所以就算你把那一行換成 public int sizeType = 100; 都會沒事 對 compiler 來說,sizeType 只是一個名稱,是不會 override 掉 superclass 的 variable declaration. 你只要在 SmallAnimal.java 中如下加一句再跑一次看看便知了: ※ 引述《cheetim (所失者寡所得者眾??)》之銘言: : class SmallAnimal extends Animal{ : public String sizeType="small size";//變數二 : public double getSize(int weight){ : double amount=100.0; : amount=amount*weight; : System.out.println(sizeType+":"+amount); System.out.println("**SUPERCLASS's sizeType variable: " + super.sizeType); : return amount; : } : public double getSize(){ : System.out.println("small size"); : return 0.0; : } : } : 在註解一的地方,跑程式的結果是small size:2000.0 : Animal class的getSize(int)會被overrided所以值是2000.0而不是400.0 : 但是變數不是不會被overrided嗎?所以變數一的值因該不會變成變數二的值阿 而結果會是 small size:2000.0 的原因,是因為在 compile SmallAnimal.java 時 compiler 只把 getSize(int weight) 中的 sizeType reference 成 SmallAnimal 自己所 declare 的 sizeType variable,這情況就像是: class TestA { public int haha = 0; public void output( int haha ) { System.out.println(haha); } public static void main(String[] argv) { TestA ta = new TestA(); ta.output(999); } } 執行這個 main 時就會 print out 999 而不是 0 一樣。 : 結果為什麼不是no size:2000.0 : 希望版上高手可以幫我解說一下 謝謝摟 -- 很多人以為 所以我要 其實我是個 我是大學生 告訴大家 三十一歲的怪叔叔 ● ●/ ︿ ︿ /\ < ● ㄨ /\ ㄨ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.102.77.18 ※ 編輯: superlubu 來自: 218.102.77.18 (05/07 21:55) ※ 編輯: superlubu 來自: 218.102.77.18 (05/07 21:57)

05/07 23:02, , 1F
解釋的很清楚 感謝
05/07 23:02, 1F
文章代碼(AID): #188RJFQ9 (java)
文章代碼(AID): #188RJFQ9 (java)