如何在Java中正确覆盖?

Boo*_*reg 0 java inheritance overriding

在我的超类中,我有以下方法:

public int getSpeed(String t)
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的子类中,我们用这个方法覆盖了方法:

public int getSpeed(String t)
{
    return x;
}
Run Code Online (Sandbox Code Playgroud)

然后我有以下内容:

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

这总是返回0.如何让它返回x?


编辑:我的代码几乎完全按照Bala R的解决方案显示,但是我只是对我的X做了一些愚蠢的事情,导致它每次都变为0.因此他的解决方案是正确的

Bal*_*a R 5

也许你x的子类实际上是零还是没有初始化?

我刚试过(Ideone链接)

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

而输出是

1
1
1
Run Code Online (Sandbox Code Playgroud)