[英]@override annotation
任何人都可以告訴我這段代碼:
public class OvTester {
@Override
public int hashCode() {
return toString().hashCode();
}
}
確定toString
在該方法中OvTester
類覆蓋toString
在其超類方法。
我想知道這是否屬實,如果是,它是如何工作的?
如果不是這樣,那么這是真的:
“ OvTester
的hashCode()
方法必須覆蓋其超類中的相同名稱方法”
?
如果這不正確那么什么是正確的?
當您在子級別中重新定義具有相同簽名的方法時,會發生方法重寫。
所以在這里你重寫hashCode()
,而不是toString()
@Override
注釋是可選的(但這是一件非常好的事情)並且表明這應該是重寫的。 如果拼錯或有錯誤類型的參數,編譯器會發出警告。
所以是的,第二個語句是真的(在這種情況下,超類是java.lang.Object
)
我想知道這是否屬實,如果是,它是如何工作的?
不,這不完全正確。
@Overrides
注釋表示“ 此方法會覆蓋超類中具有相同名稱的方法 ”。
在這種情況下hashCode
的OvTester
覆蓋hashCode
的Object
。
如果它不是真的,那么這是真的:
OvTester
的hashCode()
方法必須覆蓋其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.