首頁 Java java教程 Java中重載與重寫的區別

Java中重載與重寫的區別

Jun 23, 2017 pm 04:37 PM
java 差別 重載

學習Java的同學注意了! ! !
學習過程中遇到什麼問題或想獲取學習資源的話,歡迎加入Java學習交流群:159610322   我們一起學習Java!

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


    (1) 方法重載是讓類別以統一的方式處理不同類型資料的一種手段。多個同名函數同時存在,具有不同的參數數量/型別。

重載Overloading是一個類別中多型性的一種表現。


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

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


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


    以下是重載的範例:
    package c04.answer;//這是套件名稱
    //這是這個程式的第一個程式設計方法,在main方法中先建立一個Dog類別實例,然後在Dog類別的建構方法中利用this關鍵字呼叫不同的bark方法。

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

    //注意:除建構器以外,編譯器禁止在其他任何地方呼叫建構器。
    package c04.answer;

    public class Dog {
         Dog()
               }
         void bark()// bark()方法為重載方法
         {
                System.out.println ale\", 3.4);
         }
         void bark(String m,double l)//注意:重載的方法的回傳值都是相同的,
         {
   ;
                             類型」與「類別名稱」來區分
         {
                System.out.println(   public static void main(String[] args )
         {
                Dog dog = new Dog();
               //dog.bark(\"male\", \"yellow\" );
                //dog.bark(5, \"China\");

 


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

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

方法重寫又稱方法覆蓋。

    (2)若子類別中的方法與父類別中的某一方法具有相同的方法名稱、傳回型別和參數表,則新方法會覆寫原有的方法。

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


   (3)子類別函數的存取修飾權限不能少於父類別的;
    以下是重寫的範例:

##    概念:即呼叫物件方法的機制。

 

    動態綁定的內幕:

    1、編譯器檢查物件宣告的型別和方法名,以取得所有候選方法。試著把上例Base類別的test註解掉,這時再編譯就無法通過。

 

    2、重載決策:編譯器檢查方法呼叫的參數類型,從上述候選方法選出唯一的那一個(其間會有隱含型別轉換)。

如果編譯器找到多於一個或沒找到,此時編譯器就會報錯。試著把上例Base類別的test(byte b)註解掉,這時運行結果是1 1。

 

    3、若方法型別為priavte static final ,Java採用靜態編譯,編譯器會精確知道該呼叫哪

    個方法。

 

    4、當程式運作並且使用動態綁定來呼叫一個方法時,那麼虛擬機器必須呼叫物件的實際類型相符的方法版本。

在範例中,b所指向的實際型別是TestOverriding,所以b.test(0)呼叫子類別的test。

但是,子類別並沒有重寫test(byte b),所以b.test((byte)0)呼叫​​的是父類別的test(byte b)。

如果把父類別的(byte b)註解掉,則透過第二步驟隱含型別轉換為int,最終呼叫的是子類別的test(int i)。

 

學習摘要:

    多態性是物件導向程式設計的特性,和方法無關,

    簡單說,就是同樣的一個方法能夠根據輸入資料的不同,做出不同的處理,即方法的
    重載-有不同的參數列表(靜態多型)

  而當子類別繼承自父類別的相同方法,輸入資料一樣,但要做出有別於父類別的回應時,你就要覆寫父類別方法,

    即在子類別中重寫該方法-相同參數,不同實作(動態多態性)

 

    OOP三大特性:繼承,多型,封裝。

    public class Base

    {
        void test(int i)
        {# 
        void test(byte b )
        {
            System.out.print(b);
             void test(int i)
        {
            i++;
            System.out.println(i);
            {
            Base b=new TestOverriding();
            b.test(0)
            b.test((byte)0)
    0,這是運行時動態綁定的結果。

 

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

public class Father{

   public void speak(){

       System.out.println(Father);

    }

}

public class Son extends Father{

##public class Son extends Father{##1

##public class Son extends Father{## . ){

        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")      System.out.println("Father")

##}

public class Son extends Father{

    public void speak(){

      

    }

}       //編譯者會被預設為錯誤;

 

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

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

 

重寫方法的規則:

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

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

3、存取修飾符的限制一定大於被重寫方法的存取修飾符(public>protected>default>private)

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

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

 

而重載的規則:

1、必須有不同的參數清單;

2、可以有不責罵的回傳類型,只要參數清單不同就可以了;

3、可以有不同的存取修飾符;

4、可以拋出不同的例外;

 

重寫與重載的差異在於:

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

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

#學習Java的同學注意了! ! ! 學習過程中遇到什麼問題或想取得學習資源的話,歡迎加入Java學習交流群:159610322   我們一起學習Java!
 

##

以上是Java中重載與重寫的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP的影響:網絡開發及以後 PHP的影響:網絡開發及以後 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

centos和ubuntu的區別 centos和ubuntu的區別 Apr 14, 2025 pm 09:09 PM

CentOS 和 Ubuntu 的關鍵差異在於:起源(CentOS 源自 Red Hat,面向企業;Ubuntu 源自 Debian,面向個人)、包管理(CentOS 使用 yum,注重穩定;Ubuntu 使用 apt,更新頻率高)、支持週期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社區支持(CentOS 側重穩定,Ubuntu 提供廣泛教程和文檔)、用途(CentOS 偏向服務器,Ubuntu 適用於服務器和桌面),其他差異包括安裝精簡度(CentOS 精

PHP與Python:用例和應用程序 PHP與Python:用例和應用程序 Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

laravel和thinkphp的區別 laravel和thinkphp的區別 Apr 18, 2025 pm 01:09 PM

Laravel 和 ThinkPHP 都是流行的 PHP 框架,在開發中各有優缺點。本文將深入比較這兩者,重點介紹它們的架構、特性和性能差異,以幫助開發者根據其特定項目需求做出明智的選擇。

centos如何查看防火牆狀態 centos如何查看防火牆狀態 Apr 14, 2025 pm 08:18 PM

CentOS防火牆的狀態可以通過sudo firewall-cmd --state命令查看,返回running或not running。更詳細的信息可以使用sudo firewall-cmd --list-all查看,包括已配置的區域、服務、端口等。如果 firewall-cmd 無法解決問題,可以使用sudo iptables -L -n查看iptables規則。修改防火牆配置前請務必做好備份,以確保服務器安全性。

瑞波幣(XRP幣)屬於什麼幣種 新手詳細教程 瑞波幣(XRP幣)屬於什麼幣種 新手詳細教程 Apr 28, 2025 pm 07:57 PM

瑞波幣(XRP)由Ripple公司創建,用於跨境支付,快速且費用低,適合小額交易支付。註冊錢包和交易所後,可進行購買和存儲。

See all articles