如何在Java中正确覆盖?

时间:2011-05-05 03:09:17

标签: java inheritance override

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

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。因此他的解决方案是正确的。

2 个答案:

答案 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注释添加到覆盖方法是确保您覆盖某些内容的好方法......并且是良好的做法......但这不会有任何区别。