您好,登錄后才能下訂單哦!
小編給大家分享一下java重寫和重載的區別有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
區別:重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫,方法名和參數列表相同,返回值和形參都不能改變。重載是多個具有不同的參數個數或者類型的同名函數同時存在于同一個類中,方法名相同,參數列表不同。
問: Java 重載與重寫是什么?有什么區別?
答:
重載(Overload)是讓類以統一的方式處理不同類型數據的一種手段,實質表現就是多個具有不同的參數個數或者類型的同名函數
(返回值類型可隨意,不能以返回類型作為重載函數的區分標準)同時存在于同一個類中,是一個類中多態性的一種表現(調用方法時通過傳遞不同參數個數和參數類型
來決定具體使用哪個方法的多態性)。
----------
**重載規則:**必須具有不同的參數列表; 可以有不同的返回類型;可以有不同的訪問修飾符;可以拋出不同的異常。
重寫規則:參數列表必須完全與被重寫的方法相同,否則不能稱其為重寫;返回類型必須一直與被重寫的方法相同,否則不能稱其為重寫;
訪問修飾符的限制一定要大于等于被重寫方法的訪問修飾符;重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常,譬如父類方法聲明了一個檢查異常 IOException,在重寫這個方法時就不能拋出 Exception,只能拋出 IOException 的子類異常,可以拋出非檢查異常。
重載與重寫是 Java 多態性
的不同表現。
重寫是父類與子類之間多態性的表現,在運行時起作用(動態多態性,譬如實現動態綁定)
而重載是一個類中多態性的表現,在編譯時起作用(靜態多態性,譬如實現靜態綁定)。
問:Java 構造方法能否被重寫和重載?
答:
重寫是子類方法重寫父類的方法,重寫的方法名不變,而類的構造方法名必須與類名一致,假設父類的構造方法如果能夠被子類重寫則子類類名必須與父類類名一致才行,所以 Java 的構造方法是不能被重寫
的。而重載是針對同一個的,所以構造方法可以被重載
。
問:下面程序的運行結果是什么,為什么?
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."); } }}
答:上面程序的運行結果如下。
use Demo equals. o3 is equal with o4.
因為 Demo 類中的 public boolean equals(Demo other) 方法并沒有重寫 Object 類中的 public boolean equals(Object obj) 方法,原因是其違背了參數規則,其中一個是 Demo 類型而另一個是 Object 類型,因此這兩個方法是重載關系(發生在編譯時)而不是重寫關系;故當調用 o1.equals(o2) 時,o2 是 Object 類型參數,實際上調用了 Object 類中的 public boolean equals(Object obj) 方法
,因為在編譯時 o1 和 o2 都是 Object 類型,而Object 類的 equals 方法是通過比較內存地址才返回 false;當調用 o3.equals(o4) 時,實際上調用了 Demo 類中的 equals(Demo other) 方法,因為在編譯時 o3 和 o4 都是 Demo 類型的,所以才有上面的打印。
以上是java重寫和重載的區別有哪些的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。