• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Java中方法的重載與重寫

      2019-03-25 07:34:40任憲臻
      中國科技縱橫 2019年4期
      關(guān)鍵詞:面向?qū)ο?/a>

      任憲臻

      摘 要:在面向?qū)ο蟮膉ava編程語言中,方法的重載和方法重寫是兩個(gè)非常容易混淆的概念。本文主要針對(duì)在進(jìn)行java編程時(shí),對(duì)方法重載和方法重寫中容易混淆的概念和用法進(jìn)行闡述,并提供判斷是方法重載還是方法重寫的原則和條件。

      關(guān)鍵詞:重寫;重載;面向?qū)ο?/p>

      中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-2064(2019)04-0049-02

      在Java編程中,方法的重載可以描述為多個(gè)操作具有相同的名字,但是這些操作接收的消息類型必須不一樣,通過方法重載,可以利用同一個(gè)操作名稱,傳遞不同的消息,對(duì)象根據(jù)相應(yīng)的消息執(zhí)行不同的操作,方法的重寫一般發(fā)生在同一個(gè)類的內(nèi)部。而方法的重寫則是指不同類型的對(duì)象調(diào)用同一個(gè)操作時(shí)可能產(chǎn)生不同的行為,方法的重寫主要發(fā)生在Java繼承關(guān)系中,主要是指子類根據(jù)需要重寫父類的某個(gè)方法,這樣子類可以產(chǎn)生自己獨(dú)特的功能行為。

      1 重載(overload)

      所謂方法的重載,是指在java類中可以定義多個(gè)具有相同名字的方法,但是這些相同名字的方法的參數(shù)必須不一樣。具有不同參數(shù)的同名方法就是方法的重載,方法參數(shù)的不同可以是不同的參數(shù)個(gè)數(shù),也可以是參數(shù)個(gè)數(shù)相同,但是參數(shù)列表中某個(gè)參數(shù)的類型不同或參數(shù)順序不一致。

      在圖1所示的方法重載的例子中,兩個(gè)方法的名稱都是prt,但是兩個(gè)prt方法的參數(shù)類型不同,第一個(gè)prt方法中的兩個(gè)參數(shù)都是int類型,而第二個(gè)prt方法中的兩個(gè)參數(shù)都是String類型,所以在使用對(duì)象ol調(diào)用方法prt時(shí),根據(jù)方法傳遞的實(shí)參的類型不一樣,輸出的結(jié)果也不一樣。

      需要注意的是,在方法的重載中,方法的返回類型不作為判斷方法重載的條件。如下圖2所示,兩個(gè)方法的名字相同(都是compute),方法中參數(shù)的類型不同(int 和double),雖然方法的返回值類型不同(一個(gè)返回int,一個(gè)無返回值),但是這種情況也是方法的重載。

      在java中使用方法的重載時(shí),在保證方法的參數(shù)不同的基礎(chǔ)上,也一定要避免重載方法調(diào)用時(shí)可能出現(xiàn)的歧義。如圖3所示的代碼,當(dāng)執(zhí)行語句ol.prt(3, 20)時(shí),Java編譯器不知道應(yīng)該去調(diào)用重載方法中的哪一個(gè),所以會(huì)導(dǎo)致重載方法的歧義調(diào)用,就會(huì)導(dǎo)致無法通過編譯。

      2 重寫(override)

      方法的重寫也稱覆蓋,是指在java類的繼承關(guān)系中,子類重寫從父類中繼承過來的方法,使得這個(gè)方法更符合子類的特性。當(dāng)子類重寫父類的方法時(shí),要求該方法的名字、參數(shù)類型、參數(shù)個(gè)數(shù)必須和父類的完全相同,而且要求該方法的返回值類型必須和父類的返回值類型一致或者是父類返回值類型的子類型。

      子類通過重寫從父類繼承過來的方法,可以把父類的狀態(tài)和行為改變?yōu)樽宇愖陨淼臓顟B(tài)和行為。子類重寫父類的方法后,那么從父類繼承過來的這個(gè)方法就會(huì)被隱藏起來,當(dāng)子類對(duì)象調(diào)用這個(gè)方法時(shí),調(diào)用的一定是子類重寫后的方法。圖4所示,當(dāng)執(zhí)行語句demo.prt()時(shí),調(diào)用的是子類重寫的從父類繼承過來prt方法,所以程序輸出的結(jié)果是“Son class”,而不是說“Father class”

      在子類重寫的方法中,可以訪問從父類繼承過來的成員變量,也可以調(diào)用從父類繼承的方法,也可以操作子類中定義的新成員變量和新方法,但是如果想要訪問因?yàn)樽宇愔貙懚浑[藏的成員變量或者方法,必須通過super來進(jìn)行調(diào)用。如下圖5改寫的圖4中所示的Son類后,輸出結(jié)果如下所示。當(dāng)執(zhí)行語句demo.prt()時(shí),調(diào)用的是子類重寫的prt方法,但是在這個(gè)重寫的prt方法中,通過語句super.prt(),則可以調(diào)用被子類重寫的prt方法隱藏的父類的prt方法。(但是需要注意一點(diǎn),如果父類中方法的修飾符是private,那么這個(gè)方法在子類中通過super也是不能訪問的。)

      在重寫父類的方法時(shí),還必須注意子類重寫的方法的訪問權(quán)限不能低于父類方法的訪問權(quán)限(訪問控制修飾符的訪問權(quán)限由低到高的順序是:private、默認(rèn)友好的、protected、public)。在圖6中,父類prt方法的訪問控制修飾符是protected,如果子類在重寫此方法時(shí)使用默認(rèn)友好的訪問權(quán)限(無修飾控制符),則代碼無法通過編譯,這是因?yàn)槟J(rèn)友好的訪問權(quán)限級(jí)別低于protected,所以代碼編譯失敗。

      子類重寫父類方法是Java面向?qū)ο缶幊虒?shí)現(xiàn)多態(tài)的一個(gè)重要環(huán)節(jié),因?yàn)楦割惖姆椒梢员凰亩鄠€(gè)子類重新改寫,所以這些子類都可以具有自己的行為特性,那么根據(jù)這個(gè)特性,我們可以用一個(gè)父類的對(duì)象變量引用指向子類創(chuàng)建的對(duì)象,當(dāng)這個(gè)對(duì)象在調(diào)用方法時(shí)就會(huì)具有多種形態(tài),因?yàn)椴煌淖宇愒谥貙懜割惙椒〞r(shí)都會(huì)生成不同的行為。

      綜上所述,方法的重載發(fā)生在同一個(gè)類的內(nèi)部,通過多個(gè)相同的方法名稱、但是參數(shù)不同(可以是參數(shù)個(gè)數(shù)、參數(shù)類型、參數(shù)順序不同)的多個(gè)方法,實(shí)現(xiàn)同一類型的功能。方法的重載和方法的返回值類型無關(guān),和方法的訪問控制修飾符也無關(guān)。而方法的重寫則發(fā)生在不同的類之間,是子類重寫父類的方法。通過方法重寫,可以使子類具備不同的行為特性。方法重寫的前提是繼承關(guān)系的存在,是子類重寫從父類繼承過來的方法。在實(shí)際的Java編程應(yīng)用中,我們應(yīng)該根據(jù)具體的情況,選擇應(yīng)用方法的重載或者重寫來實(shí)現(xiàn)程序的功能。

      參考文獻(xiàn)

      [1] [美]凱 S.霍斯特曼(Cay S.Horstmann).Java核心技術(shù) 卷I:基礎(chǔ)知識(shí)(原書第10版)[M].機(jī)械工業(yè)出版社,2016.

      [2] [美]Bruce Eckel.陳昊鵬,譯.Java編程思想(第4版)[M].機(jī)械工業(yè)出版社,2007.

      [3] 耿祥義,張躍平.Java2實(shí)用教程(第5版)[M].清華大學(xué)出版社,2018.

      猜你喜歡
      面向?qū)ο?/a>
      面向?qū)ο蠓椒ㄔ谒罾銹LC編程中應(yīng)用分析
      電子制作(2019年7期)2019-04-25 13:18:00
      電子測試(2018年22期)2018-12-19 05:12:28
      面向?qū)ο蟮挠?jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)軟件系統(tǒng)的開發(fā)
      電子測試(2018年15期)2018-09-26 06:01:34
      面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議研究與應(yīng)用
      面向?qū)ο骔eb開發(fā)編程語言的的評(píng)估方法
      基于面向?qū)ο蟮腛ffice評(píng)測系統(tǒng)的分析
      峰叢洼地農(nóng)作物面向?qū)ο笮畔⑻崛∫?guī)則集
      遙感信息(2015年3期)2015-12-13 07:26:54
      基于E-cognition的面向?qū)ο蟮母叻直媛蔬b感圖像分類研究
      基于面向?qū)ο蟮能囕v管理軟件的研制與開發(fā)
      面向?qū)ο蟮腟oS體系結(jié)構(gòu)建模方法及應(yīng)用
      永福县| 济源市| 泗洪县| 南宁市| 页游| 新和县| 昌江| 垣曲县| 厦门市| 简阳市| 河西区| 尼木县| 武强县| 洛宁县| 巴彦淖尔市| 西青区| 台湾省| 姜堰市| 永宁县| 洛阳市| 昌乐县| 松溪县| 温泉县| 株洲市| 玉山县| 忻城县| 犍为县| 博爱县| 如皋市| 呼和浩特市| 灵寿县| 陆良县| 应城市| 镇江市| 文山县| 沂南县| 朔州市| 日喀则市| 南靖县| 房山区| 汉川市|