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

?

Java語(yǔ)言中方法重載與方法覆蓋的異同

2017-05-10 23:49李娜
電子技術(shù)與軟件工程 2017年8期
關(guān)鍵詞:多態(tài)

李娜

摘 要

面向?qū)ο缶幊逃腥筇匦裕悍庋b、繼承、多態(tài),本文主要談?wù)勂渲兄欢鄳B(tài)的兩種實(shí)現(xiàn)方式——方法重載與方法覆蓋,并比較它們的異同。

【關(guān)鍵詞】Java 多態(tài) 方法重載 方法覆蓋

在Java語(yǔ)言的學(xué)習(xí)過(guò)程中,初學(xué)者經(jīng)常分不清重載與覆蓋,實(shí)際上,方法重載(Overload)和方法覆蓋(Override,也叫重寫)都是Java多態(tài)性的體現(xiàn),只是形式不同,在此,筆者簡(jiǎn)單地談一談兩者的異同。

1 方法重載與方法覆蓋的特點(diǎn)

1.1 方法重載的特點(diǎn)

Java語(yǔ)言中的方法重載就是在類中可以創(chuàng)建多個(gè)方法,實(shí)際上就是一個(gè)類中多態(tài)性的一種表現(xiàn),也叫靜態(tài)多態(tài)。

如下面的例子:

1 class DBUtil{

2 private String server="127.0.0.1";//服務(wù)器地址

3 private String db="HRDB";//數(shù)據(jù)庫(kù)名稱

4 public String getDBUrl(String server,String db){//重載方法

5 return "jdbc:sqlserver://"+server+":1433; DatabaseName="+db;

6 }

7 public String getDBUrl(String server){ //重載方法

8 return getDBUrl(server,db);

9 }

10 public String getDBUrl(){//重載方法

11 return getDBUrl(server,db);

12 }

13 }

14 public class StaticPolymorphismDemo {

15 public static void main(String args[]) {

16 DBUtil util=new DBUtil();

17 //調(diào)用第4行的方法

18 System.out.println(util.getDBUrl("192.168.4.23","CXHR"));

19 //調(diào)用第7行的方法

20 System.out.println(util.getDBUrl("192.168.4.23"));

21 //調(diào)用第10行的方法

22 System.out.println(util.getDBUrl());

23 }

24 }

方法重載的主要特點(diǎn)有以下幾點(diǎn):第一個(gè)特點(diǎn)是方法名是相同的;第二個(gè)特點(diǎn)是方法的個(gè)數(shù)、順序、參數(shù)類型至少有一項(xiàng)是不相同的;第三個(gè)特點(diǎn)是方法的返回類型不一定要是相同的;第四個(gè)特點(diǎn)是方法的修飾符也可以是不相同的。

1.2 方法覆蓋的特點(diǎn)

Java語(yǔ)言中的方法覆蓋是指父類中有的方法,在子類中被重新定義,方法簽名一樣(方法名,參數(shù)個(gè)數(shù)和參數(shù)類型都一樣)的情況,也叫動(dòng)態(tài)多態(tài)。

如下面的例子:

public class Base {

public void method() {}

}

public class Sub extends Base{

public void method() {}

}

方法覆蓋的特點(diǎn)主要有以下幾點(diǎn):第一個(gè)特點(diǎn)是方法覆蓋只存在于子類和父類之間,在同一個(gè)類中的方法不能被覆蓋;第二個(gè)特點(diǎn)是父類方法拋出的異??梢员茸宇惙椒ǜ?; 第三個(gè)特點(diǎn)是父類方法的名稱、參數(shù)簽名和返回類型與子類方法的是一致的; 第四個(gè)特點(diǎn)是子類是不允許將父類的靜態(tài)方法覆蓋為非靜態(tài)方法,父類的非靜態(tài)方法也不能被子類覆蓋為靜態(tài)方法;第五個(gè)特點(diǎn)是子類方法不能縮小父類方法的訪問(wèn)權(quán)限;第六個(gè)特點(diǎn)是子類不能覆蓋父類的私有方法;第七個(gè)特點(diǎn)是子類可以通過(guò)兩種途徑覆蓋父類的抽象方法:一種是子類實(shí)現(xiàn)父類的抽象方法,另一種是子類重新聲明父類的抽象方法;第八個(gè)特點(diǎn)是父類的非抽象方法可以被覆蓋為抽象方法。

2 方法重載與方法覆蓋的異同

2.1 方法重載與方法覆蓋的相同點(diǎn)

Java語(yǔ)言中,方法重載與方法覆蓋的主要相同點(diǎn)有兩個(gè):第一個(gè)相同點(diǎn)是法重載與方法覆蓋都要求方法同名;第二個(gè)相同點(diǎn)是方法重載與方法覆蓋在抽象方法和非抽象方法之間都可以使用。

2.2 方法重載與方法覆蓋的不同點(diǎn)

Java語(yǔ)言中,方法重載與方法覆蓋的主要不同點(diǎn)有以下5個(gè):第一個(gè)不同點(diǎn)是方法重載不允許參數(shù)簽名一致,相反,方法覆蓋則要求參數(shù)簽名必須一致;第二個(gè)不同點(diǎn)是方法重載對(duì)返回類型是否一致不做限制,而方法覆蓋則要求返回類型必須一致;第三個(gè)不同點(diǎn)是方法重載可以用于同一個(gè)類的所有方法,而方法覆蓋則僅限于用于子類覆蓋父類的方法;第四個(gè)不同點(diǎn)是方法重載對(duì)方法的訪問(wèn)權(quán)限和拋出的異常方法不做限制性要求,而方法覆蓋對(duì)此則有特殊的要求;第五個(gè)不同點(diǎn)是一個(gè)方法在所在的類中可以多次重載,而父類的一個(gè)方法則只能被子類覆蓋一次。

總之,方法的重載(Overload)和覆蓋(Overrid)是Java多態(tài)性的不同表現(xiàn)。重載(Overload)是一個(gè)類中多態(tài)性的一種表現(xiàn),而覆蓋(Overrid)是父類與子類之間多態(tài)性的一種表現(xiàn)。靈活地運(yùn)用方法重載與方法覆蓋,不僅能減少編碼的工作量,也能大大提高程序的可維護(hù)性及可擴(kuò)展性。

參考文獻(xiàn)

[1]姜靜思.Java中類的多態(tài)性分析[J].科技展望,2015(01).

[2]陽(yáng)小蘭,錢程.JAVA語(yǔ)言中構(gòu)造方法的繼承與重載探討[J].電腦知識(shí)與技術(shù),2010(21).

[3]李寧.Java中的方法重寫與方法重載[J].科技信息,2009(03).

猜你喜歡
多態(tài)
分層多態(tài)加權(quán)k/n系統(tǒng)的可用性建模與設(shè)計(jì)優(yōu)化
參差多態(tài)而功不唐捐
多態(tài)及其在數(shù)據(jù)結(jié)構(gòu)中的應(yīng)用
煙堿型乙酰膽堿受體基因多態(tài)與早發(fā)性精神分裂癥的關(guān)聯(lián)研究