亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Overriding Methods in Java? – Always use @Override

Ryan_Li / 2113人閱讀

摘要:原文鏈接原作者譯者個(gè)人翻譯,水平有限,如有錯(cuò)誤歡迎指出,謝謝注解在中被引入,注解是默認(rèn)注解之一?,F(xiàn)在我們創(chuàng)建一個(gè)測試類來檢驗(yàn)在中覆蓋是如何工作的。得到該結(jié)果的原因是方法沒有被任何覆蓋,因此會嘗試調(diào)用的方法實(shí)現(xiàn)。

原文鏈接
原作者:Pankaj
譯者:smallclover
個(gè)人翻譯,水平有限,如有錯(cuò)誤歡迎指出,謝謝!

Java @Override注解

Java Annotations在Java1.5中被引入,Override注解是Java默認(rèn)注解之一。當(dāng)我們在方法上使用這個(gè)注解的時(shí)候,它將告訴編譯器我們試圖覆蓋一個(gè)父類的方法。

讓我們看看java中如何覆蓋一個(gè)方法。

BaseClass.java

package com.journaldev.annotations;
 
public class BaseClass {
     
    public void doSomething(String str){
        System.out.println("Base impl:"+str);
    }
     
}

現(xiàn)在我們將創(chuàng)建一個(gè)子類,該子類覆蓋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);
   }
 
}

請注意現(xiàn)在我們注釋掉了@Override注解。

現(xiàn)在我們創(chuàng)建一個(gè)測試類來檢驗(yàn)在java中覆蓋是如何工作的。

OverrideTest.java

package com.journaldev.annotations;
 
public class OverrideTest {
 
    public static void main(String[] args) {
        BaseClass bc = new ChildClass();
        bc.doSomething("override");
    }
 
}

以上程序輸出結(jié)果如下:

Child impl:override

這里的bcBaseClass類型,但是運(yùn)行的時(shí)候,它所指向的對象是ChildClass類型的,所以當(dāng)我們調(diào)用doSomething(String str)方法的時(shí)候,它會在ChildClass中查找該方法,因此會有如上輸出
現(xiàn)在讓我們改變BaseClassdoSomething()方法,具體如下所示。

//Change argument from String to Object
public void doSomething(Object str){
    System.out.println("Base impl:"+str);
}

你將注意到,編譯器將不會拋出任何警告或者錯(cuò)誤 并且如果你現(xiàn)在運(yùn)行這個(gè)測試程序?qū)⒌玫揭韵螺敵觥?/p>

Base impl:override

得到該結(jié)果的原因是 BaseClass doSomething(Object str)方法沒有被任何ChildClass覆蓋,因此會嘗試調(diào)用BaseClass的方法實(shí)現(xiàn)。ChildClass只是重寫了doSomething()方法而已。

如果你沒有注釋掉ChildClass@Override注解,在你更改了BaseClass中的doSomething()方法后你將會得到編譯器給出的錯(cuò)誤信息,錯(cuò)誤信息如下所示:

The method doSomething(String) of type ChildClass must override or implement a supertype method

很明顯,使用@Override注解將會確保超類對方法簽名的任何改變都將導(dǎo)致一個(gè)警告產(chǎn)生,你必須進(jìn)行必要的修改來確保類正常的工作。

在編譯時(shí)解決一個(gè)潛在的問題要好于在運(yùn)行時(shí)解決問題,所以當(dāng)你想要覆蓋超類的方法的時(shí)候,請確保一直使用@Override注解。

ps:譯者認(rèn)為,養(yǎng)成一種良好的編程習(xí)慣有助于查找錯(cuò)誤和理清思路,對于如何管理和編輯代碼,每個(gè)人應(yīng)該都有自己的一套方法,仁者見仁智者見智吧。

google的Java代碼編寫規(guī)范Google-Java-Style,網(wǎng)絡(luò)上已經(jīng)有人做過翻譯,這里只貼出了英文版的地址,中文版請自行尋找哦(≧▽≦)/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/65815.html

相關(guān)文章

  • Java Interview Questions (1)

    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...

    xuxueli 評論0 收藏0
  • [LintCode] Shape Factory

    摘要:這道題考了,具體概念如下除此之外,還需要注意正則表達(dá)式的寫法。 Problem Factory is design pattern in common usage. Implement a ShapeFactory that can generate correct shape. Example ShapeFactory sf = new ShapeFactory(); Shape s...

    zebrayoung 評論0 收藏0
  • Java interview question

    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...

    thekingisalwaysluc 評論0 收藏0
  • JVM執(zhí)行方法調(diào)用(一)- 重載與重寫

    摘要:重寫語言中的定義子類方法有一個(gè)方法與父類方法的名字相同且參數(shù)類型相同。父類方法的返回值可以替換掉子類方法的返回值。思維導(dǎo)圖參考文檔極客時(shí)間深入拆解虛擬機(jī)是如何執(zhí)行方法調(diào)用的上廣告 原文 回顧Java語言中的重載與重寫,并且看看JVM是怎么處理它們的。 重載Overload 定義: 在同一個(gè)類中有多個(gè)方法,它們的名字相同,但是參數(shù)類型不同。 或者,父子類中,子類有一個(gè)方法與父類非私有方...

    韓冰 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<