2011-05-05 57 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注释压倒一切的方法是,以确保您的好方法”已经推翻了一些东西......并且是很好的练习......但这不会在这里产生任何影响。