Java學習筆記17---成員方法的重載與重寫

来源:http://www.cnblogs.com/chanchan/archive/2017/11/28/7906876.html
-Advertisement-
Play Games

重載是指,一個類中定義了一個成員方法後,通過修改參數個數、參數類型或參數順序,重新實現該方法,則這兩個方法互為對方的重載方法。 重寫是指,子類重新實現父類的成員方法。 重載後的方法,與原方法相比: (1).方法名相同,參數個數、參數類型及參數順序至少有一個不同; (2).返回值類型與訪問許可權修飾符可 ...


重載是指,一個類中定義了一個成員方法後,通過修改參數個數、參數類型或參數順序,重新實現該方法,則這兩個方法互為對方的重載方法。

重寫是指,子類重新實現父類的成員方法。

 

重載後的方法,與原方法相比:

(1).方法名相同,參數個數、參數類型及參數順序至少有一個不同;

(2).返回值類型與訪問許可權修飾符可以相同也可以不同,只修改這兩項不能算重載;

(3).靜態成員方法也可以重載,重載後的方法也可以是非靜態成員方法;

(4).可以有多個重載方法。

 

子類重寫後的方法,與父類的方法相比:

(1).方法名、參數個數、參數類型及參數順序必須一致;

(2).返回值類型為基本數據類型時,不可以修改,返回值為類類型時,可以修改,具體參見筆記13

(3).訪問許可權修飾符可以修改也可以不修改,如果修改的話,必須要大於父類方法的訪問範圍;

(4).靜態成員方法也可以重寫,但重寫後的方法只是被隱藏,並未覆蓋父類的方法,具體參見筆記12

(5).一個子類只能重寫父類的某個成員方法一次,否則,子類就會出現重名方法,會報錯。

 

 重載是同一個類內部的多個成員方法互為重載方法,重寫是子類的成員方法重寫了父類的成員方法;重載一般是為了創建一組要完成相似任務的成員方法,重寫的目的是為了實現多態,實現多態有3個條件:繼承、重寫、向上轉型,缺一不可。

 

作者: 蟬蟬

請尊重作者勞動成果,轉載請在標題註明“轉載”字樣,並標明原文鏈接:

 http://www.cnblogs.com/chanchan/p/7906876.html 

 

下麵是簡單的程式示例。

Person類是Student類的父類,TestMain類是測試類,具體代碼如下:

Person類的代碼:

package human;

public class Person {
    String name;
    int age;
    String gender;

    public Person() {
        
    }
    
//筆記17:重載:方法名不變,參數的個數、類型及順序至少與原方法有一個不同
//可以更改返回值類型及訪問許可權修飾符,但不是必須的,只修改這兩項也不算重載    
    public int overLoadP(int i, String s) {
        System.out.println("i = " + i + ", " + s);
        return i+1;
    }

//    public char overLoadP(int i, String s) {
//        return i+1;
//    }

    //可以更改返回值類型及訪問許可權修飾符
    protected char overLoadP(int i) {
        System.out.println("i = " + i);
        return (char)(i+2);
    }

    public int overLoadP(int i, int n) {
        System.out.println("i = " + i + ", n = " + n);
        return i+n;
    }

    public int overLoadP(String s, int i) {
        System.out.println(s + ", i = " + i);
        return i;
    }

    static void overLoadPS() {
        System.out.println("靜態成員方法可以重載嗎");
    }

    void overLoadPS(int i) {
        System.out.println("靜態成員方法可以重載");
    }
    
}

 

Student類的代碼:

package human;

public class Student extends Person {
    String stuNumber;
    int score;

    public Student() {
        
    }    
    
//筆記17:重寫:方法名、參數的個數、類型及順序都要與父類方法一致
//子類重寫時,只有返回值為類類型時,才可以更改返回類型,且只能改為返回值類型的子類
//子類訪問許可權修飾符的範圍要大於父類的
//    public char overLoadP(int i, String s) {
    public int overLoadP(int i, String s) {
        System.out.println("子類重寫:i = " + i + ", " + s);
        return i+1;
    }

}

 

TestMain類的代碼:

package human;

public class TestMain {
    public static void main(String[] args) {
        
        Person per = new Person();
        Student stu = new Student();
        
        per.overLoadP(1);
        per.overLoadP(1, 2);
        per.overLoadP(1, "bokeyuanchanchan");
        per.overLoadP("bokeyuanchanchan", 1);
        per.overLoadPS(2);
        per.overLoadPS();
        
        stu.overLoadP(1,"博客園蟬蟬");
}

 

輸出結果如下:

1 i = 1
2 i = 1, n = 2
3 i = 1, bokeyuanchanchan
4 bokeyuanchanchan, i = 1
5 靜態成員方法可以重載
6 靜態成員方法可以重載嗎
7 子類重寫:i = 1, 博客園蟬蟬

 

分析如下:

關於重載:

(1).最先定義了public int overLoadP(int i, String s)這個方法,方法名為overLoadP,有兩個參數,分別為int型和String型,返回值為int型。

(2).隨後又定義了3個重名的方法,分別為:

protected char overLoadP(int i)

public int overLoadP(int i, int n)

public int overLoadP(String s, int i)

這3個方法與原方法的參數不同點分別在於,參數個數不同、參數類型不同、參數順序不同,這3個方法都是原方法的重載方法,這4個方法互為對方的重載方法。

其中protected char overLoadP(int i),返回值類型與訪問許可權修飾符也與原方法不同,可見這兩項是可以修改的,但只修改這兩項並不能算重載,見(3)。

(3).Person類中下麵註釋掉的代碼行,與第1個方法僅返回值不同,會出現“Duplicate method voerLoadP(int, String) in type Person”的錯誤。也就是說,僅返回值類型不同是不能算重載的。

// public char overLoadP(int i, String s) {

// return i+1;

// }

(4).由結果可知,靜態成員方法也可以重載。

關於重寫:

(5).子類重寫了父類的public int overLoadP(int i, String s),方法名、參數個數、參數類型、參數順序及返回值類型都與父類一致。

對於代碼中註釋掉的行,不註釋的話會提示返回值類型與父類返回值不一致的錯誤。

// public char overLoadP(int i, String s) {


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 非對稱加密演算法 1.1 概述 1976年,美國學者Dime和Henman為解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,允許在不安全的媒體上的通訊雙方交換信息,安全地達成一致的密鑰,這就是“公開密鑰系統”。 與對稱加密演算法不同,非對稱加密演算法需要兩個密鑰:公開密鑰(publickey ...
  • 原文:http://blog.csdn.net/u012152619/article/details/51485297 一般來說,上面的幾個配置項對任何項目都是必不可少的,定義了項目的基本屬性。 這裡有必要對一個不太常用的屬性classifier做一下解釋,因為有時候引用某個jar包,classif ...
  • 本節內容 - 什麼是方法集 - 方法集區分基礎類型T和指針類型*T - 匿名嵌入對方法集的影響 - 方法集調用 ...
  • 語法: mvn install:install-file -Dfile=jar包的位置(參數一) -DgroupId=groupId(參數二) -DartifactId=artifactId(參數三) -Dversion=version(參數四) -Dpackaging=jar 我把“ojdbc-1 ...
  • JAVA靜態代碼塊會在類被載入時自動執行? 一、先看Java靜態方法,靜態變數 http://www.cnblogs.com/winterfells/p/7906078.html 靜態代碼塊 在類中,可以將某一塊代碼聲明為靜態的,這樣的程式塊叫靜態初始化段。靜態代碼塊的一般形式如下: 編譯通過後,用 ...
  • 上邊有字元串複製直接使用賦值號。 string1=string2; 實際上他執行的是什麼操作? strcpy(string1,string2); ...
  • 首先題主說的20%我不知道從哪方面去理解。接下來我會將自己多年來工作中會經常使用到的技術列出來。 1.html、css 2.java工作原理(jvm) 3.java語法、數據結構和演算法 4.java語言特性(封裝、繼承、多態、抽象) 5.java設計模式(在開發中會經常用到) 6.java反射機制( ...
  • 寫在前面: 對於可移動的列表框,ligerui中也對其進行了封裝,可以直接照著demo拿來用,不過那都是直接在頁面上靜態初始化的數據,那麼如何從後臺獲取? 前面有了對ligerui的一些組件的使用經驗後,在這裡其實 對於從後臺獲取數據在前臺頁面進行顯示,都大同小異。也不是很難。 即要麼是在liger ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...