Java基礎:重載與重寫

重載(Overloading)

重載(Overload)是讓類以統一的方式處理不同類型數據的一種手段,實質表現就是多個具有不同的參數個數或者類型的同名函數(返回值類型可隨意,不能以返回類型作爲重載函數的區分標準)同時存在於同一個類中,是一個類中多態性的一種表現(調用方法時通過傳遞不同參數個數和參數類型來決定具體使用哪個方法的多態性)


重載發生在本類,方法名相同,參數列表不同,與返回值無關,只和方法名,參數列表,參數的類型有關.
重載(Overload):首先是位於一個類之中或者其子類中,具有相同的方法名,但是方法的參數不同,返回值類型可以相同也可以不同。

  1. 方法名必須相同
  2. 方法的參數列表一定不一樣。
  3. 訪問修飾符和返回值類型可以相同也可以不同。

其實簡單而言:重載就是對於不同的情況寫不同的方法。 比如,同一個類中,寫不同的構造函數用於初始化不同的參數。

重寫(Overriding)

重寫(Override)是父類與子類之間的多態性,實質是對父類的函數進行重新定義,如果在子類中定義某方法與其父類有相同的名稱和參數則該方法被重寫,不過子類函數的訪問修飾權限不能小於父類的;若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法,如需父類中原有的方法則可使用 super 關鍵字。


重寫發生在父類子類之間,比如所有類都是繼承與Object類的,Object類中本身就有equals,hashcode,toString方法等.在任意子類中定義了重名和同樣的參數列表就構成方法重寫.
重寫(override):一般都是表示子類和父類之間的關係,其主要的特徵是:方法名相同,參數相同,但是具體的實現不同。
重寫的特徵:

  1. 方法名必須相同,返回值類型必須相同
  2. 參數列表必須相同
  3. 訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類的一個方法被聲明爲public,那麼在子類中重寫該方法就不能聲明爲protected。
  4. 子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了聲明爲private和final的方法。
  5. 構造方法不能被重寫,

 

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

 

方法的重載和重寫都是實現多態的方式,區別在於前者實現的是編譯時的多態性,而後者實現的是運行時的多態性。

重載發生在一個類中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同或者二者都不同)則視爲重載;

重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的參數列表,有兼容的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。

重載對返回類型沒有特殊的要求,不能根據返回類型進行區分。

 

Java 構造方法能否被重寫和重載?
  重寫是子類方法重寫父類的方法,重寫的方法名不變,而類的構造方法名必須與類名一致,假設父類的構造方法如果能夠被子類重寫則子類類名必須與父類類名一致才行,所以 Java 的構造方法是不能被重寫的。而重載是針對同一個的,所以構造方法可以被重載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章