簡體   English   中英

如何在 Java 中正確覆蓋?

[英]How do I correctly Override in 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?


編輯:我的代碼幾乎完全按照 Bala R 的解決方案所示編寫,但是我只是對我的 X 做了一些愚蠢的事情,導致它每次都舍入為 0。 因此,他的解決方案是正確的。

也許您在子類中的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;
    }

}

output 是

1
1
1

如果代碼與您在問題中編寫的一樣,那么您已經正確實現了覆蓋。 查看零speed值的替代解釋包括:

  • x的值尚未初始化,或已設置為零。

  • 注釋//contains only objects of the subclass是不正確的。

但我不認為我們可以在沒有看到真實代碼的情況下說更多...


向覆蓋方法添加 @Override 注釋是確保您已覆蓋某些內容的好方法......並且是一種很好的做法......但在這里不會有任何區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM