5.java中重載與重寫的區別

一、首先我們來講講:重載(Overloading)

1、方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。

2、Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。

調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。

3、重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標準。

下面是重載的例子:

package c04.answer;//

這是包名

//

這是這個程序的第一種編程方法,在main方法中先創建一個Dog類實例,然后在Dog類的構造方法中利用this關鍵字調用不同的bark方法。

不同的重載方法bark是根據其參數類型的不同而區分的。

??? //注意:除構造器以外,編譯器禁止在其他任何地方中調用構造器。

package c04.answer;

public class Dog {

Dog()

{

this.bark();

}

void bark()//bark()

方法是重載方法

{

System.out.println(\"no barking!\");

this.bark(\"female\", 3.4);

}

void bark(String m,double l)//

注意:重載的方法的返回值都是一樣的,

{

System.out.println(\"a barking dog!\");

this.bark(5, \"China\");

}

void bark(int a,String n)//

不能以返回值區分重載方法,而只能以“參數類型”和“類名”來區分

{

System.out.println(\"a howling dog\");

}

public static void main(String[] args)

{

Dog dog = new Dog();

//dog.bark(); [Page]

//dog.bark(\"male\", \"yellow\");

//dog.bark(5, \"China\");

  然后我們再來談談?重寫(Overriding)

1

、父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。

但有時子類并不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。

方法重寫又稱方法覆蓋。

2

、若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。

如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。

3

、.子類函數的訪問修飾權限不能少于父類的;下面是重寫的例子:

概念:即調用對象方法的機制。

學習總結

? ? 多態性是面向對象編程的一種特性,和方法無關,簡單說,就是同樣的一個方法能夠根據輸入數據的不同,做出不同的處理,即方法的重載——有不同的參數列表(靜態多態性)

 ?而當子類繼承自父類的相同方法,輸入數據一樣,但要做出有別于父類的響應時,你就要覆蓋父類方法,

? ? 即在子類中重寫該方法——相同參數,不同實現(動態多態性)

重寫的主要優點是能夠定義某個子類特有的特征:

public?class?Father{

public?void?speak(){

System.out.println(Father);

}

}

public?class?Son?extends?Father{

public?void?speak(){

System.out.println("son");

}

}

這也叫做多態性,重寫方法只能存在于具有繼承關系中,重寫方法只能重寫父類非私有的方法。

當上例中Father類speak()方法被private時,Son類不能重寫出Father類speak()方法,此時Son類speak()方法相當與在Son類中定義的一個speak()方法。

Father類speak()方法一但被final時,無論該方法被public,protected及默認所修飾時,Son類根本不能重寫Father類speak()方法,

試圖編譯代碼時,編譯器會報錯。例:

public?class?Father{

final?public?void?speak(){

System.out.println("Father");

}

}

public?class?Son?extends?Father{

public?void?speak(){

System.out.println("son");

}

}???????//編譯器會報錯;

Father類speak()方法被默認修飾時,只能在同一包中,被其子類被重寫,如果不在同一包則不能重寫。

Father類speak()方法被protoeted時,不僅在同一包中,被其子類被重寫,還可以不同包的子類重寫。

重寫方法的規則

1、參數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載。

2、返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載。

3、訪問修飾符的限制一定要大于被重寫方法的訪問修飾符(public>protected>default>private)

4、重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:

父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。

而重載的規則:

1、必須具有不同的參數列表;

2、可以有不責罵的返回類型,只要參數列表不同就可以了;

3、可以有不同的訪問修飾符;

4、可以拋出不同的異常;

重寫與重載的區別在于:

重寫多態性起作用,對調用被重載過的方法可以大大減少代碼的輸入量,同一個方法名只要往里面傳遞不同的參數就可以擁有不同的功能或返回值。

用好重寫和重載可以設計一個結構清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般.

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • 1.JDK和JRE的區別 2.final修飾的作用 3.多態 4.default的含義 5.java中重載與重寫的...
    眼中的晴空閱讀 376評論 0 0
  • 重載(Overloading)和重寫(Overriding)是Java中兩個比較重要的概念 重載 簡單說,就是函數...
    Blues2013閱讀 350評論 0 1
  • Java 方法重載和方法重寫的區別有哪些? 解析:先明白重載和重寫的定義。 一、方法重寫(0verride) 在J...
    南城刀閱讀 748評論 0 1
  • java繼承 繼承的概念 繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。 繼承就是子類繼...
    863cda997e42閱讀 686評論 0 1
  • 真愛,無需言堅持,讀書,寫作亦如是。-----試筆
    柳絮XM閱讀 243評論 2 4