2011-05-05 65 views
0

在我的父,我有以下方法:我如何正確覆蓋Java?

public int getSpeed(String t) 
{ 
    return 0; 
} 

在我的子類我他們在此改變的方法與此:

public int getSpeed(String t) 
{ 
    return x; 
} 

然後我有以下幾點:

ArrayList<super> //contains only objects of the subclass 
for (super s:collection) 
{ 
    s.getSpeed(""); 
} 

而且這總是返回0.我如何得到它返回x?


編輯:我寫的代碼幾乎完全一樣巴拉的r解決方案展示,但我只是做了我的X愚蠢的東西,導致它每一次四捨五入爲0。因此他的解決方案是正確的

+0

爲什麼'getSpeed()'接受一個字符串? – 2011-05-05 03:18:55

+0

@BlueRaja,我傳入了調用它的其他類的子類的名稱。在你說出來之前,我已經知道它的寫法非常糟糕,但我知道沒有更好的辦法。它應該是不同類型的道路上不同類型的車輛。 – BookOfGreg 2011-05-05 03:21:44

+0

聽起來像你應該使用泛型,或者有第三類處理如何處理不同的車輛/道路類型對。 – 2011-05-05 03:46:26

回答

5

也許你的x在子類中實際上是零或未初始化?

我只是想(Ideone link

import java.util.ArrayList; 
public class Main { 
    public static void main(String[] args) throws java.lang.Exception { 

     new Main(); 
    } 

    Main(){ 
     ArrayList<Super> list = new ArrayList<Super>(); 
     list.add(new Sub()); 
     list.add(new Sub()); 
     list.add(new Sub()); 
     for (Super s:list) 
     { 
      System.out.println(s.getSpeed("")); 
     } 
    } 
} 

class Super { 
    public int getSpeed(String t) { 
     return 0; 
    } 
} 

class Sub extends Super { 
    @Override 
    public int getSpeed(String t) { 
     return 1; 
    } 

} 

和輸出

1 
1 
1 
+0

我在課堂上面宣佈了它。 'public class Sub extends Super {int x = 70;' – BookOfGreg 2011-05-05 03:22:50

+1

@NeoNMD請參閱http://ideone.com/g6GMl。我改變它返回x並將其初始化爲70。 – 2011-05-05 03:26:24

1

如果代碼是因爲你已經在這個問題寫它,那麼你已經正確實施重寫。對於看到零個speed值替代的解釋包括:

  • x值尚未初始化或已設置爲零。

  • 評論//contains only objects of the subclass不正確。

但我不認爲我們可以說什麼都沒有看到真正的代碼...


添加一個@Override註釋壓倒一切的方法是,以確保您的好方法」已經推翻了一些東西......並且是很好的練習......但這不會在這裏產生任何影響。