国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java中方法的重載與重寫

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

任憲臻

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

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

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

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

1 重載(overload)

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

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

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

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

2 重寫(override)

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

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

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

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

子類重寫父類方法是Java面向?qū)ο缶幊虒崿F(xiàn)多態(tài)的一個重要環(huán)節(jié),因為父類的方法可以被它的多個子類重新改寫,所以這些子類都可以具有自己的行為特性,那么根據(jù)這個特性,我們可以用一個父類的對象變量引用指向子類創(chuàng)建的對象,當(dāng)這個對象在調(diào)用方法時就會具有多種形態(tài),因為不同的子類在重寫父類方法時都會生成不同的行為。

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

參考文獻(xiàn)

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

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

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

猜你喜歡
面向?qū)ο?/a>
面向?qū)ο蠓椒ㄔ谒罾銹LC編程中應(yīng)用分析
電子測試(2018年22期)2018-12-19
面向?qū)ο蟮挠嬎銠C網(wǎng)絡(luò)設(shè)計軟件系統(tǒng)的開發(fā)
面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議研究與應(yīng)用
面向?qū)ο骔eb開發(fā)編程語言的的評估方法
基于面向?qū)ο蟮腛ffice評測系統(tǒng)的分析
峰叢洼地農(nóng)作物面向?qū)ο笮畔⑻崛∫?guī)則集
基于E-cognition的面向?qū)ο蟮母叻直媛蔬b感圖像分類研究
基于面向?qū)ο蟮能囕v管理軟件的研制與開發(fā)
面向?qū)ο蟮腟oS體系結(jié)構(gòu)建模方法及應(yīng)用