簡述override和overload的區別
阿新 • • 發佈:2019-02-06
在文件中經常遇到這兩個單詞,但是意思經常混淆。首先我們看一下這兩個單詞的含義:
override(重寫,覆蓋) (1)方法名、引數、返回值相同。 (2)子類方法不能縮小父類方法的訪問許可權。 (3)子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。 (4)存在於父類和子類之間。 (5)方法被定義為final不能被重寫。 (6)被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。
overload(過載,過載) (1)引數型別、個數、順序至少有一個不相同。 (2)不能過載只有返回值不同的方法名。 (3)針對於一個類而言。 (4)不能通過訪問許可權、返回型別、丟擲的異常進行過載; (5)方法的異常型別和數目不會對過載造成影響;
override應用中,最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了宣告,而我們在實現時,就需要實現介面宣告的所有方法。 除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。
override是在不同類之間的行為,overload是在同一個類中的行為。
過載,在同一個類中,允許存在同名函式,但它們的引數個數或者引數型別不同即可。
public static void main(String[] args){ System.out.println(add(1,2)); System.out.println(add(1.11,2.22)); } //返回一個int型別相加的和 public static int add(int a, int b){ return a + b; } //返回一個double型別想加的和 public static double add(double a, double b){ return a + b; }
過載,在一個類定義中,可以編寫幾個同名的方法,但是隻要它們的簽名引數列表不同,Java就會將它們看做唯一的方法。簡單的說,一個類中的方法與另一個方法同名,但是引數表不同,這種方法稱之為過載方法。
class Father{
int num = 3;
}
class Son extends Father{
int num = 5;
}
這時候子類繼承了父類,也擁有了num,這時候輸出num,JVM會先去父類中查詢,輸出父類中的num,但是子類有num,所有在執行子類的時候重寫了num的值,輸出5。