JAVA中繼承時方法的重載(overload)與重寫/覆寫(override)


JAVA繼承時方法的重載(overload)與重寫/覆寫(override)

 

重載-Override

函數的方法參數個數類型不一致,稱為方法的重載。

從含義上說,只要求參數的個數或參數的類型不一致就說兩個函數是重載函數,而至於返回值是否一樣,沒關系。同時,重載可以發生在同一個類中也可以發生在繼承關系中。

class A
{

}

class B extends A

{

    public void fun(String data1)

    {

        System.out.println(data1);

    }

    public String fun(String data1, String data2)

    {

        System.out.println(data1 + "-->" + data2);

        return "";

    }

}

上面的代碼說明了在同一個類中的方法重載。此外,如果我們把第一個函數移到A類中,也構成了重載關系。

 

class A

{

    public void fun(String data1)

    {

        System.out.println(data1);

    }

}

class B extends A

{

    public String fun(String data1, String data2)

    {

        System.out.println(data1 + "-->" + data2);

        return "";

    }

}

 

重寫-Override

重寫也被稱為覆寫。對一個方法的重寫必須發生在具有繼承關系的兩個類中,即子類對父類方法的重寫。它要求兩個方法的參數個數類型以及返回值類型都必須一致,這樣才稱為方法重寫。

class A

{

    public void fun(String data)

    {

        System.out.println(data);

    }

}

class B extends A

{

    public void fun(String data)

    {

        System.out.println("XXXX" + data);

    }

}

上面代碼演示了子類對父類方法的覆寫。可以看到兩個函數的參數個數和類型以及返回值都是一致的。

同時子類對父類的方法覆寫對權限有要求,子類方法的訪問權限必須大於或等於父類方法的訪問權限。也就是說如果父類方法的訪問權限是default,那么子類必須是default或者public,如果父類方法是public訪問權限,那么子類就只能是public訪問權限了。然而,實際開發中,絕大多數的方法都是public訪問權限,所以覆寫方法也是public

關於訪問權限,還有一點需要注意的是,父類方法如果是private,根據JAVA的封裝性原則,private是不讓其它任何類訪問的。那么,此時子類能否對父類的private方法進行覆寫呢?

答案是否定的。

class A

{

    public void test()

    {

        fun();

    }

    private void fun()

    {

        System.out.println("父類的private fun()");

    }

}

class B extends A

{

    public void fun()

    {

        System.out.println("子類的public fun()");

    }

}

public class Hello

{

    public static void main(String[] args) throws Exception

    {

        B b = new B();

        b.test();

    }

}

此時運行結果是調用的父類的private fun()方法。

所以,此時對重載和覆寫做一個總結:

比較項目

重載

覆寫/重寫

英文名

Overload

Override

函數簽名

只要求函數的參數個數或類型不一致,對返回值沒要求

函數的參數個數、類型、返回值都必須完全一樣。

發生地方

同一個類或者具有繼承關系的兩個類中

只能發生在繼承關系的兩個類中

訪問權限

沒有限制

子類覆寫方法的訪問權限必須大於或等於父類的方法的訪問權限


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM