溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java重寫和重載的區(qū)別有哪些

發(fā)布時間:2020-10-20 18:03:37 來源:億速云 閱讀:116 作者:小新 欄目:編程語言

小編給大家分享一下java重寫和重載的區(qū)別有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

區(qū)別:重寫是子類對父類的允許訪問的方法的實現(xiàn)過程進行重新編寫,方法名和參數(shù)列表相同,返回值和形參都不能改變。重載是多個具有不同的參數(shù)個數(shù)或者類型的同名函數(shù)同時存在于同一個類中,方法名相同,參數(shù)列表不同。


問: Java 重載與重寫是什么?有什么區(qū)別?

答:
  重載(Overload)是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段,實質(zhì)表現(xiàn)就是多個具有不同的參數(shù)個數(shù)或者類型的同名函數(shù)(返回值類型可隨意,不能以返回類型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn))同時存在于同一個類中,是一個類中多態(tài)性的一種表現(xiàn)(調(diào)用方法時通過傳遞不同參數(shù)個數(shù)和參數(shù)類型來決定具體使用哪個方法的多態(tài)性)。

java重寫和重載的區(qū)別有哪些

java重寫和重載的區(qū)別有哪些

圖2. Android類中的常見的一個重寫例子

----------

**重載規(guī)則:**必須具有不同的參數(shù)列表; 可以有不同的返回類型;可以有不同的訪問修飾符;可以拋出不同的異常。

重寫規(guī)則:參數(shù)列表必須完全與被重寫的方法相同,否則不能稱其為重寫;返回類型必須一直與被重寫的方法相同,否則不能稱其為重寫;訪問修飾符的限制一定要大于等于被重寫方法的訪問修飾符;重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉挿旱臋z查型異常,譬如父類方法聲明了一個檢查異常 IOException,在重寫這個方法時就不能拋出 Exception,只能拋出 IOException 的子類異常,可以拋出非檢查異常。

重載與重寫是 Java 多態(tài)性的不同表現(xiàn)。
  重寫是父類與子類之間多態(tài)性的表現(xiàn),在運行時起作用(動態(tài)多態(tài)性,譬如實現(xiàn)動態(tài)綁定)
  而重載是一個類中多態(tài)性的表現(xiàn),在編譯時起作用(靜態(tài)多態(tài)性,譬如實現(xiàn)靜態(tài)綁定)。


問:Java 構(gòu)造方法能否被重寫和重載?

答:
  重寫是子類方法重寫父類的方法,重寫的方法名不變,而類的構(gòu)造方法名必須與類名一致,假設(shè)父類的構(gòu)造方法如果能夠被子類重寫則子類類名必須與父類類名一致才行,所以 Java 的構(gòu)造方法不能被重寫的。而重載是針對同一個的,所以構(gòu)造方法可以被重載

問:下面程序的運行結(jié)果是什么,為什么?

public class Demo {
    public boolean equals( Demo other) {
        System.out.println("use Demo equals." );
        return true;    }
    public static void main(String[] args) {    
    Object o1 =new Demo ();
    Object o2 =new Demo ();        
    Demo o3 =new Demo ();
    Demo o4 =new Demo ();

   if (o1.equals(o2)) {
            System.out.println("o1 is equal with o2.");
        }

   if(o3.equals(o4)) {             
            System.out.println("o3 is equal with o4.");
        }
    }}

答:上面程序的運行結(jié)果如下。

use Demo equals.
o3 is equal with o4.

因為 Demo 類中的 public boolean equals(Demo other) 方法并沒有重寫 Object 類中的 public boolean equals(Object obj) 方法,原因是其違背了參數(shù)規(guī)則,其中一個是 Demo 類型而另一個是 Object 類型,因此這兩個方法是重載關(guān)系(發(fā)生在編譯時)而不是重寫關(guān)系;故當(dāng)調(diào)用 o1.equals(o2) 時,o2 是 Object 類型參數(shù),實際上調(diào)用了 Object 類中的 public boolean equals(Object obj) 方法,因為在編譯時 o1 和 o2 都是 Object 類型,而Object 類的 equals 方法是通過比較內(nèi)存地址才返回 false;當(dāng)調(diào)用 o3.equals(o4) 時,實際上調(diào)用了 Demo 類中的 equals(Demo other) 方法,因為在編譯時 o3 和 o4 都是 Demo 類型的,所以才有上面的打印。

以上是java重寫和重載的區(qū)別有哪些的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI