或者特別是:有什么區別
interface A {
void fa();
}
interface B extends A {
void fa();
void fb();
}
和
interface A {
void fa();
}
interface B extends A {
@Override
void fa();
void fb();
}
它是否以任何方式影響實作類?
uj5u.com熱心網友回復:
不,不應該。無論介面 B 是否注釋相同的方法簽名,實作的類interface B仍然必須提供一個實作。此外,在這種情況下,將注釋放在介面 B 中沒有多大意義,因為注釋基本上意味著您正在覆寫超類賦予該方法簽名的實作。因為nor提供了一個實作它沒有意義。void fa();@Override@OverrideInterface AInterface Bvoid fa()
如果為例如interface A提供默認實作將是有意義的:void fa()
interface A {
public default void fa(){
System.out.println("My default implementation");
}
}
fa()在這種情況下,介面 B 將通過再次抽象來覆寫從介面 A 提供的實作。當介面 A 定義fa()為抽象并且介面 B 通過將其轉換為default方法來為其提供實作時也是如此。
uj5u.com熱心網友回復:
@Override 注解只是提醒編譯器在定義錯誤時向您顯示錯誤。它不影響任何事情。好的做法是始終撰寫它。
uj5u.com熱心網友回復:
添加或省略@Override不會改變fa方法的覆寫行為。它是基于名稱和引數型別的覆寫(在本例中為無),僅此而已。回傳型別需要兼容(協變回傳),但不是“這是覆寫與否”決策的一部分。
@Override注釋(主要)用于驗證方法是否覆寫了超型別的方法。如果您忽略它,您的 IDE 或其他工具(如 SonarQube)可能會發出警告,但編譯器并不關心。如果您錯誤地添加它,那么它的真正目的就會發揮作用 - 您將收到編譯器錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433418.html
標籤:爪哇
上一篇:如何避免代碼中的大量縮進?
