摘要:同樣的方法名稱,參數列表,返回類型,拋出的異常或者是父類拋出的異常的子類,子類重寫一個。使用方法過載的目的,根據調用時的實參表與形參表,來選擇對應的方法體的。
問題出現:
即使對于一個經驗豐富的開發人員來說,方法重載和方法覆蓋的區別都能讓他猶豫一下, 對于新手來說,經常容易弄混淆。 有沒有比較深入淺出的理解方式,能讓人過目不忘,用起來還能有條件反射般的速度呢?
其他人是怎么做的:
寫類似比較的博客非常之多,無非也就是分開介紹,然后比較區別。 好像也有效果,前提是要理解,完了還要不時拿來復習,保持記憶不被遺忘。
可以這樣理解:
override 更準確的翻譯應該是推翻,重寫。 overload 更準確的翻譯應該是過載。 如果你不是新手,看到這個解釋的時候應該有點茅塞頓開的感覺, 因為直譯之后的意思就是這兩個方式的功能概括。 所以: override 個人喜歡叫做方法重寫; overload 個人喜歡叫做方法過載。
分析:
為什么叫方法重寫: 父類中的方法滿足不了需要,子類可以推翻父類中的方法。 同樣的方法名稱,參數列表,返回類型,拋出的異常(或者是父類拋出的異常的子類),子類重寫一個。 所以方法重寫要求很嚴格,除了方法體內部的實現和訪問權限,其他的都要和父類中需要被重寫的方法保持一致。 有一點要特別注意,方法重寫之后訪問權限可以不同: 可以擴大訪問權限,但是不能降低訪問權限。 可以看作是對子類的兼容性和拓展性要求的折衷妥協吧。 注意:被重寫的方法訪問權限不能為 private,因為 private 修飾的方法子類沒有訪問權限,更不要提重寫。 為什么叫方法過載: 過載指的是應對不同的參數列表而產生的方法過載。 所以方法過載要求方法名稱必須相同,參數列表必須不同; 訪問權限,返回類型,拋出的異常之類的可以相同也可以不同。 使用方法過載的目的,根據調用時的實參表與形參表,來選擇對應的方法體的。 注意:如果某一方法在父類中是訪問權限是 private,那么就不能在子類對其進行重載; 如果定義的話,也只是定義了一個新方法,而不會達到重載的效果。
練習一下:
class A { protected int method1(int a, int b) { return 0; } } public class B extends A{ public int method1(int a, int b) { return 0; } // private int method1(int a, int b) { return 0; } // private long method1(int a, int b) { return 0; } public short method1(int a, long b) { return 0; } private int method1(int a, long b) { return 0; } } (參考答案預警!你不打算在心里演算一下么?)
參考答案:
class A { protected int method1(int a, int b) { return 0; } } public class B extends A{ public int method1(int a, int b) { return 0; } // 正確,重寫父類方法,可以擴大訪問權限 // private int method1(int a, int b) { return 0; } // 錯誤,重寫父類方法,不能降低了訪問權限 // private long method1(int a, int b) { return 0; } // 錯誤,重寫父類方法,不能改變返回值類型 public short method1(int a, long b) { return 0; } // 正確,method1 方法參數過載,可以有不同的訪問權限和返回值類型 private int method1(int a, long b) { return 0; }/ /正確,method1 方法參數過載,可以有不同的訪問權限和返回值類型 }
小結:
override 方法重寫,也叫方法覆蓋; 要求與被重寫的方法: 名稱相同, 參數列表相同, 返回類型相同, 拋出的異常相同(或者是父類拋出的異常的子類)。 被重寫的方法訪問權限不能為 private。 overload 方法過載; 要求過載的方法: 方法名稱必須相同; 參數列表必須不同; 訪問權限,返回類型,拋出的異常可以相同也可以不同。
傳送門:http://blog.51cto.com/1350814...
本文系筆者原創
轉載請注明出處
—————————————
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72843.html
摘要:豐富的特性還支持通知過期等等特性。到這個就說明測試通過了。主要針對方法配置,能夠根據方法的請求參數對其進行緩存,常用于查詢操作主要針對方法配置,能夠根據方法的請求參數對其進行緩存,常用于修改操作清空緩存,主要用于刪除操作。 [TOC] Redis簡介 Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基于內存亦可持久化的日志型、Key-Value 數...
摘要:也是自帶的一個基于線程池設計的定時任務類。其每個調度任務都會分配到線程池中的一個線程執行,所以其任務是并發執行的,互不影響。 原創不易,如需轉載,請注明出處https://www.cnblogs.com/baixianlong/p/10659045.html,否則將追究法律責任!!! 一、在JAVA開發領域,目前可以通過以下幾種方式進行定時任務 1、單機部署模式 Timer:jdk中...
摘要:甲乙交易活動不需要雙方見面,避免了雙方的互不信任造成交易失敗的問題。這就是的核心思想。統一配置,便于修改。帶參數的構造函數創建對象首先,就要提供帶參數的構造函數接下來,關鍵是怎么配置文件了。 前言 前面已經學習了Struts2和Hibernate框架了。接下來學習的是Spring框架...本博文主要是引入Spring框架... Spring介紹 Spring誕生: 創建Spring的...
摘要:采用完全獨立于任何程序語言的文本格式,使成為理想的數據交換語言為什么需要提到,我們就應該和來進行對比。也是一種存儲和交換文本信息的手段。那么好在哪里呢比更小更快,更易解析。使用的時候,也支持將轉成但是,我們不一定使用框架來做開發呀。 什么是JSON JSON:JavaScript Object Notation 【JavaScript 對象表示法】 JSON 是存儲和交換文本信息的語法...
摘要:問題出現中的,運算,可以寫出比較復雜的演算表達式看了一些大神的演算規則解釋,覺得不是很好理解,有些人甚至理解錯了規則。特殊情況當表達式的所有值都是真值,并且運算符不全部一致,那么第一個或演算完后直接返回。 問題出現: Python 中的 or,and 運算,可以寫出比較復雜的演算表達式; 看了一些大神的演算規則解釋,覺得不是很好理解,有些人甚至理解錯了規則。 這里聊一下自己的理解。 ...
閱讀 4001·2023-04-26 02:13
閱讀 2244·2021-11-08 13:13
閱讀 2729·2021-10-11 10:59
閱讀 1732·2021-09-03 00:23
閱讀 1301·2019-08-30 15:53
閱讀 2275·2019-08-28 18:22
閱讀 3050·2019-08-26 10:45
閱讀 726·2019-08-23 17:58