在我的超类中,我有以下方法:
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?
编辑:我的代码几乎与Bala R的解决方案完全一致,但是我只是对我的X做了一些愚蠢的事情,导致它每次都变为0。因此他的解决方案是正确的。
答案 0 :(得分: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
答案 1 :(得分:1)
如果代码是您在问题中写的那样,那么您已经正确地实现了覆盖。查看零speed
值的替代解释包括:
x
的值尚未初始化,或已设为零。
评论//contains only objects of the subclass
不正确。
但我认为如果不看真实代码我们就不能再说了什么......
将@Override注释添加到覆盖方法是确保您覆盖某些内容的好方法......并且是良好的做法......但这不会有任何区别。