Re: [問題] 請問一下override的情況
的而且確是沒有 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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):