Java語言中方法重載與方法覆蓋的異同

來源:文萃谷 1.07W

導語:在Java語言的學習過程中,初學者經常分不清重載與覆蓋,實際上,方法重載(Overload)和方法覆蓋(Override,也叫重寫)都是Java多態性的體現,只是形式不同,在此,筆者簡單地談一談兩者的異同。 下面就由小編為大家介紹一下Java語言中方法重載與方法覆蓋的異同,歡迎大家閲讀!

Java語言中方法重載與方法覆蓋的異同

  1 方法重載與方法覆蓋的特點

1.1 方法重載的特點

Java語言中的方法重載就是在類中可以創建多個方法,實際上就是一個類中多態性的一種表現,也叫靜態多態。

如下面的例子:

1 class DBUtil{

2 private String server="";//服務器地址

3 private String db="HRDB";//數據庫名稱

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 //調用第4行的方法

18 tln(BUrl("","CXHR"));

19 //調用第7行的方法

20 tln(BUrl(""));

21 //調用第10行的方法

22 tln(BUrl());

23 }

24 }

方法重載的主要特點有以下幾點:第一個特點是方法名是相同的;第二個特點是方法的個數、順序、參數類型至少有一項是不相同的;第三個特點是方法的返回類型不一定要是相同的;第四個特點是方法的修飾符也可以是不相同的。

1.2 方法覆蓋的特點

Java語言中的方法覆蓋是指父類中有的方法,在子類中被重新定義,方法簽名一樣(方法名,參數個數和參數類型都一樣)的情況,也叫動態多態。

如下面的例子:

public class Base {

public void method() {}

}

public class Sub extends Base{

public void method() {}

}

方法覆蓋的特點主要有以下幾點:第一個特點是方法覆蓋只存在於子類和父類之間,在同一個類中的方法不能被覆蓋;第二個特點是父類方法拋出的異常可以比子類方法更多; 第三個特點是父類方法的名稱、參數簽名和返回類型與子類方法的是一致的; 第四個特點是子類是不允許將父類的靜態方法覆蓋為非靜態方法,父類的非靜態方法也不能被子類覆蓋為靜態方法;第五個特點是子類方法不能縮小父類方法的訪問權限;第六個特點是子類不能覆蓋父類的私有方法;第七個特點是子類可以通過兩種途徑覆蓋父類的抽象方法:一種是子類實現父類的抽象方法,另一種是子類重新聲明父類的抽象方法;第八個特點是父類的.非抽象方法可以被覆蓋為抽象方法。

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

2.1 方法重載與方法覆蓋的相同點

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

2.2 方法重載與方法覆蓋的不同點

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

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

熱門標籤