簡體   English   中英

@override注釋

[英]@override annotation

任何人都可以告訴我這段代碼:

public class OvTester {
    @Override
    public int hashCode() {
        return toString().hashCode();
    }
}

確定toString在該方法中OvTester類覆蓋toString在其超類方法。

我想知道這是否屬實,如果是,它是如何工作的?

如果不是這樣,那么這是真的:

OvTesterhashCode()方法必須覆蓋其超類中的相同名稱方法”

如果這不正確那么什么是正確的?

當您在子級別中重新定義具有相同簽名的方法時,會發生方法重寫。

所以在這里你重寫hashCode() ,而不是toString()

@Override注釋是可選的(但這是一件非常好的事情)並且表明這應該是重寫的。 如果拼錯或有錯誤類型的參數,編譯器會發出警告。

所以是的,第二個語句是真的(在這種情況下,超類是java.lang.Object

我想知道這是否屬實,如果是,它是如何工作的?

不,這不完全正確。

@Overrides注釋表示“ 此方法會覆蓋超類中具有相同名稱的方法 ”。

在這種情況下hashCodeOvTester覆蓋hashCodeObject

如果它不是真的,那么這是真的: OvTesterhashCode()方法必須覆蓋其superClass中的相同名稱方法嗎?

是。 這正是它的工作原理。


當一個方法沒有做任何事情而不是調用另一個方法(幾乎是你在你的例子中得到的)時,它通常被稱為委托方法 也許這就是你對此感到困惑的原因。

@Override注釋不會“確定”任何內容。 如果帶注釋的方法沒有覆蓋超類或接口方法,它只是一個告訴編譯器引發錯誤的標志。 它是開發人員幫助維護其理智的工具,僅此而已。

在這種特定情況下,它只是注意到OvTester中的hashCode()實現覆蓋了Object定義的hashCode()方法。 這與toString()沒有任何關系,並且從hashCode()方法調用超類的toString()方法不會與覆蓋toString()

這是真的? OvTester中的hashCode()方法必須覆蓋其superClass中的相同名稱方法嗎?

確實如此,如果超類中沒有與帶注釋方法的簽名匹配的可覆蓋hashCode()方法,則注釋將導致編譯器引發錯誤。

不,這只會意味着重寫了hashCode()方法。 編譯器將在編譯時檢查hashCode()是否是一個被覆蓋的方法(帶有該簽名)。

該代碼覆蓋了基礎Object類的hashCode()方法。 toString()方法仍然具有原始實現。

要覆蓋toString() ,請執行以下操作:

@Override
public String toString() {
    //Your own toString() implememntation here
}

只要在子類中的方法具有相同的名稱和簽名作為父類中的方法, 在父類中的方法不是私人將(無論注解的存在overidden @Override

@Override只是編譯時檢查實現者是否真的覆蓋了該方法。

如果你嘗試覆蓋

@Override
public void equals(Object ob){

}

它將無法編譯

暫無
暫無

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

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