摘要:原文鏈接原作者譯者個人翻譯,水平有限,如有錯誤歡迎指出,謝謝注解在中被引入,注解是默認注解之一。現在我們創建一個測試類來檢驗在中覆蓋是如何工作的。得到該結果的原因是方法沒有被任何覆蓋,因此會嘗試調用的方法實現。
Java @Override注解原文鏈接
原作者:Pankaj
譯者:smallclover
個人翻譯,水平有限,如有錯誤歡迎指出,謝謝!
Java Annotations在Java1.5中被引入,Override注解是Java默認注解之一。當我們在方法上使用這個注解的時候,它將告訴編譯器我們試圖覆蓋一個父類的方法。
讓我們看看java中如何覆蓋一個方法。
BaseClass.java
package com.journaldev.annotations; public class BaseClass { public void doSomething(String str){ System.out.println("Base impl:"+str); } }
現在我們將創建一個子類,該子類覆蓋BaseClass類的doSomething()方法。
ChildClass.java
package com.journaldev.annotations; public class ChildClass extends BaseClass{ //@Override public void doSomething(String str){ System.out.println("Child impl:"+str); } }
請注意現在我們注釋掉了@Override注解。
現在我們創建一個測試類來檢驗在java中覆蓋是如何工作的。
OverrideTest.java
package com.journaldev.annotations; public class OverrideTest { public static void main(String[] args) { BaseClass bc = new ChildClass(); bc.doSomething("override"); } }
以上程序輸出結果如下:
Child impl:override
這里的bc是BaseClass類型,但是運行的時候,它所指向的對象是ChildClass類型的,所以當我們調用doSomething(String str)方法的時候,它會在ChildClass中查找該方法,因此會有如上輸出
現在讓我們改變BaseClass的doSomething()方法,具體如下所示。
//Change argument from String to Object public void doSomething(Object str){ System.out.println("Base impl:"+str); }
你將注意到,編譯器將不會拋出任何警告或者錯誤 并且如果你現在運行這個測試程序將得到以下輸出。
Base impl:override
得到該結果的原因是 BaseClass doSomething(Object str)方法沒有被任何ChildClass覆蓋,因此會嘗試調用BaseClass的方法實現。ChildClass只是重寫了doSomething()方法而已。
如果你沒有注釋掉ChildClass中@Override注解,在你更改了BaseClass中的doSomething()方法后你將會得到編譯器給出的錯誤信息,錯誤信息如下所示:
The method doSomething(String) of type ChildClass must override or implement a supertype method
很明顯,使用@Override注解將會確保超類對方法簽名的任何改變都將導致一個警告產生,你必須進行必要的修改來確保類正常的工作。
在編譯時解決一個潛在的問題要好于在運行時解決問題,所以當你想要覆蓋超類的方法的時候,請確保一直使用@Override注解。
ps:譯者認為,養成一種良好的編程習慣有助于查找錯誤和理清思路,對于如何管理和編輯代碼,每個人應該都有自己的一套方法,仁者見仁智者見智吧。
google的Java代碼編寫規范Google-Java-Style,網絡上已經有人做過翻譯,這里只貼出了英文版的地址,中文版請自行尋找哦(≧▽≦)/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65815.html
What is Java? Java is a high-level platform-independent object oriented programming language. List some features of Java? Object Oriented, Platform Independent, Multi-threaded, Interpreted, Robust, pa...
摘要:這道題考了,具體概念如下除此之外,還需要注意正則表達式的寫法。 Problem Factory is design pattern in common usage. Implement a ShapeFactory that can generate correct shape. Example ShapeFactory sf = new ShapeFactory(); Shape s...
what is the difference between overriding and overloading? Overriding is resolved at runtime while overloading is compile time. Override: is a language feature that allows a subclass to provide a spec...
摘要:重寫語言中的定義子類方法有一個方法與父類方法的名字相同且參數類型相同。父類方法的返回值可以替換掉子類方法的返回值。思維導圖參考文檔極客時間深入拆解虛擬機是如何執行方法調用的上廣告 原文 回顧Java語言中的重載與重寫,并且看看JVM是怎么處理它們的。 重載Overload 定義: 在同一個類中有多個方法,它們的名字相同,但是參數類型不同。 或者,父子類中,子類有一個方法與父類非私有方...
閱讀 2970·2023-04-25 17:46
閱讀 3594·2021-11-25 09:43
閱讀 1100·2021-11-18 10:02
閱讀 3058·2021-10-14 09:43
閱讀 2776·2021-10-13 09:40
閱讀 1529·2021-09-28 09:35
閱讀 2190·2019-08-30 15:52
閱讀 3161·2019-08-30 14:06