方法重载和方法重写的区别和作用
生活随笔
收集整理的這篇文章主要介紹了
方法重载和方法重写的区别和作用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、方法重載(Overload)
背景:
- 有時我們要用到一個函數同時兼容多種類型或者參數的情況,這時我們就要用到方法重載。
含義:
- 一個方法的邏輯是一樣的,但是考慮到要適用不同的場景(參數個數不同,參數類型不同)。一個方法往往實現一個功能的,我們總不能因為參數個數的不同,給方法的名字起上成千上萬了不同的名字吧。
作用:
- 解決了邏輯相同的方法,因為參數個數或者參數類型不同。反復起名的過程。
形象理解:
- 這里我們要實現,求和的方法。在對方法進行起名的時候,我們首先想到的就是 sum(參數),好了下邊問題來了。假設我們的參數填入兩個整形的時候,我們就不能叫sum了。但是要是后邊在進行3個、4個、5個成千上萬個參數的時候,我們不能一直起名字。此時就引入了方法重載。
重載規則:
- 重載時方法名相同。
- 重載時方法參數一定不同(可能體現為不同方法參數個數不同或者參數個數相同但是類型不同)。
- 方法的返回值類型不會影響重載。
注意事項:
- 重載時與返回值的類型時無關的,要是兩個方法的名字和參數類型都一樣,但返回值類型不一樣,此時不叫方法重載,此時會編譯錯誤。
- 構成重載的兩個方法要在同一個作用域中。
重載代碼理解:
class Test { public static void main(String[] args) { int a = 10; int b = 20; // 這里想要一個求兩數之和的方法,起名為add(int a,int b) int ret = add(a, b); System.out.println("ret = " + ret); // 你看這里還是相同的邏輯,但是方法的參數類型由int變為double了,重載一下,就能繼續叫做add方法了。 double a2 = 10.5; double b2 = 20.5; double ret2 = add(a2, b2); System.out.println("ret2 = " + ret2); // 你再看這里,邏輯功能還是求和,和上邊類型時一樣的,但是參數的個數不同了,方法重載引入后,就還能叫add了 double a3 = 10.5; double b3 = 10.5; double c3 = 20.5; double ret3 = add(a3, b3, c3); System.out.println("ret3 = " + ret3); } // 最后我們來總結一下哈。 上邊的三個方法實現的功能都是求和功能,名字都叫add. 但是有的 add 是計算 int 相加, 有的是 double 相加; 有的計算兩個數字相加, 有的是計算三個數字相加.同一個方法名字, 提供不同版本的實現, 稱為方法重載二、方法重寫(Override)
背景:
- 原來設計有一個類,我們隨著業務的更新想對原來的類進行擴展,此時引入了方法重寫。
含義:
- 對于已經投入使用的類,盡量不要去修改。我們的處理方式為重新定義一個類,讓這個類復用原來類全部功能和內容,并且在這個重新定義的類中進行功能的完善和擴展。
作用:
- 不影響原類的所有功能。
- 能更好的進行功能完善以及代碼維護。
- 進行多態操作時,只需要子類重寫父類的方法,不用重復寫代碼。
形象理解:
- 手機在剛開始的時候只能打電話,發短信。隨著社會的不斷發展,對通信業務要求越來越高。要對手機的功能進行完善和擴展。在擴展的時候不是在原來的類中操作。而是重寫原來手機類進行重寫,在原來的基礎上改動即可。
注意事項
- 方法重寫的時候子類方法和父類方法的名字、參數個數、參數類型完全相同。
- 重寫的時候重寫的方法(子類方法),被重寫的方法(父類方法),兩者是繼承關系。
- 重寫的方法不能擁有比父類更嚴格的訪問控制權限。
代碼理解:
// 上邊說過方法重寫的兩個類是繼承的關系。所以這里先來一個父類的定義,用形狀來表示父類 class Shape { public void draw() { // 啥都不用干 } } // 在來上幾個子類,繼承自父類。 class Cycle extends Shape {// 圓圈這個子類 // 下邊直接進行方法的重寫,用@Override @Override // 下邊這個訪問控制權限不能高于父類 public void draw() { System.out.println("○"); } } class Rect extends Shape {// 矩形這個形狀 // 同樣進行父類方法的重寫 @Override public void draw() { System.out.println("□"); } } class Flower extends Shape {// 花這個形狀 // 對父類方法進行重寫。 @Override public void draw() { System.out.println("?"); } }三、方法重載和方法重寫的區別
總結
以上是生活随笔為你收集整理的方法重载和方法重写的区别和作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript 实现一个通讯录
- 下一篇: SSL-ZYC 2133 腾讯大战360