Java中的覆蓋和重載是面向?qū)ο缶幊痰闹匾拍睢?它們都是多態(tài)性的實(shí)現(xiàn)方式,使得同名的方法和構(gòu)造函數(shù)可以有不同的行為。 下面將分別對(duì)它們進(jìn)行詳細(xì)的解釋。
方法覆蓋
方法覆蓋是指子類中定義了一個(gè)與父類中同名、同參數(shù)列表和同返回值類型的方法。 當(dāng)在子類中調(diào)用該方法時(shí),將覆蓋父類中的同名方法,實(shí)現(xiàn)不同的行為。 以下是方法覆蓋的典型例子:
public class Animal { public void move() { System.out.println("Animal is moving."); } } public class Dog extends Animal { public void move() { System.out.println("Dog is running."); } }
在這個(gè)例子中,子類中的move()方法覆蓋了父類中的move()方法。 當(dāng)調(diào)用Dog類的move()方法時(shí),將輸出 "Dog is running." 而不是父類中的 "Animal is moving."。
方法重載
方法重載是指在一個(gè)類中定義了多個(gè)同名的方法,但它們的參數(shù)列表不同。 這些方法在調(diào)用時(shí)通過參數(shù)的數(shù)量、類型、順序的不同,實(shí)現(xiàn)不同的行為。 以下是方法重載的典型例子:
public class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } }
在這個(gè)例子中,類中定義了兩個(gè)同名的add()方法,但其參數(shù)分別為兩個(gè)整數(shù)或兩個(gè)浮點(diǎn)數(shù)。 當(dāng)調(diào)用該類的add()方法時(shí),編譯器根據(jù)傳入的參數(shù)來決定使用哪個(gè)add()方法。 如果傳入的是整數(shù),則調(diào)用第一個(gè)方法;如果傳入的是浮點(diǎn)數(shù),則調(diào)用第二個(gè)方法。
總的來說,方法覆蓋和方法重載是Java中實(shí)現(xiàn)多態(tài)性的兩種方式。 它們都允許在同名的方法或構(gòu)造函數(shù)中實(shí)現(xiàn)不同的行為,提高了代碼的可復(fù)用性和可擴(kuò)展性。