成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:方法重寫和方法重載有什么區別?

開發 前端
方法重寫(Override)和方法重載(Overload)都是面向對象編程中,多態特性的不同體現,但二者本身并無關聯,它們的區別猶如馬德華之于劉德華的區別,除了名字長得像之外,其他的都不像。

方法重寫(Override)和方法重載(Overload)都是面向對象編程中,多態特性的不同體現,但二者本身并無關聯,它們的區別猶如馬德華之于劉德華的區別,除了名字長得像之外,其他的都不像。

接下來咱們就來扒一下二者的具體區別。

1.方法重寫

方法重寫(Override)是一種語言特性,它是多態的具體表現,它允許子類重新定義父類中已有的方法,且子類中的方法名和參數類型及個數都必須與父類保持一致,這就是方法重寫。

1.1 基本用法

方法重寫的基本用法如下:

  1. /** 
  2.  * 父類中有一個 method 方法 
  3.  */ 
  4. class Father { 
  5.     public void method(String name) { 
  6.         System.out.println("Father:" + name); 
  7.     } 
  8. /** 
  9.  * 子類中重寫了父類的 method 方法 
  10.  */ 
  11. class Son extends Father { 
  12.     @Override 
  13.     public void method(String name) { 
  14.         // 子類中重新定義了打印的行為,不再是 Father:XXX,而是 Son:XXX 
  15.         System.out.println("Son:" + name); 
  16.     } 

1.2 使用場景

方法重寫在 Java 中應用的場景有很多,其中比較經典的是 Object 類中的 equals 方法。Object 是所有類的父類,equals 方法在 Object 類中的實現源碼如下:

從上述源碼可以看出,Object 類中的 equals 是用來比較兩個對象的引用地址是否相同的。但對于字符串來說,它是被 final 修飾的,所以每次創建的字符串引用地址都不同,那這時比較引用地址就沒意義了,所以 String 類必須重寫父類 Object 中的 equals 方法,具體源碼如下:

通過上述代碼我們可以看出,String 中的 equals 方法,已經不是比較兩個字符串的引用地址是否相同了,而是判斷兩個字符串的值是否相同。

1.3 注意事項

在方法重寫時需要注意的事項有以下 5 個:

  • 注意事項 1:子類方法的權限控制符不能變小,也就是如果父類方法的權限控制符是 protected,那么子類的方法權限控制符只能是 protected 或 public;
  • 注意事項 2:子類方法返回的類型只能變小,也就是說如果父類方法返回的是 Number 類型,那么子類方法只能返回 Number 類型或 Number 類的子類 Long 類型,而不能返回 Number 類型的父類類型 Object;
  • 注意事項 3:子類拋出異常的類型只能變小;
  • 注意事項 4:子類方法名必須和父類方法名保持一致;
  • 注意事項 5:子類方法的參數類型和個數必須和父類保持一致。

2.方法重載

方法重載是指在同一個類中,定義了多個同名方法,但同名方法的參數類型或參數個數不同就是方法重載。

2.1 基本使用

以下 4 個 method 方法就是方法重載:

  1. public class OverloadExample { 
  2.     public static void method() { 
  3.         // doSomething 
  4.     } 
  5.  
  6.     public static void method(String name) { 
  7.         // doSomething 
  8.     } 
  9.  
  10.     public static void method(Integer id) { 
  11.         // doSomething 
  12.     } 
  13.  
  14.     public static void method(Integer id, String name) { 
  15.         // doSomething 
  16.     } 

2.2 使用場景

方法重載的經典使用場景是 String 類型的 valueOf 方法,valueOf 方法重載有 9 種實現,如下圖所示:圖片它可以將數組、對象和基礎數據類型轉換成字符串類型。

2.3 注意事項

方法重載的優先匹配原則有以下 5 個:

  • 第 1 匹配原則:優先匹配相同數據類型,方法重載會優先調用和方法參數類型一模一樣的方法,比如只有一個 String 類型的參數調用,會優先匹配只有一個 String 參數類型的重載方法;
  • 第 2 匹配原則:如果是基本數據類型,會自動轉換成更大的基本數據類型進行匹配,比如調用的參數是 int 類型,那么會優先調用基本類型 long,而非包裝類型 Integer(這點需要特殊注意,容易出錯)。
  • 第 3 匹配原則:自動裝箱和自動拆箱匹配,參數調用也會進行自動拆箱和自動裝箱的方法匹配,比如調用參數傳遞的是 int 類型,那么它可以匹配到 Integer 類型的重載方法;
  • 第 4 匹配原則:會按照繼承路線依次向上匹配父類,如果匹配不到當前類,會嘗試匹配它的父類,或者是父類的父類,依次往上匹配;
  • 第 5 匹配原則:可變參數匹配,如果方法是可選參數方法,那么它的調用優先級是最低的,在最后階段才會匹配可選參數方法。

方法重載會按照以上的 5 個原則依次進行匹配,符合規則的方法會被優先調用。除了以上匹配原則之外,還需要特殊注意一點,不同的返回類型不能作為方法重載的依據,也就是不同的返回值類型不算方法重載,關于這一點的詳細介紹可參考:https://mp.weixin.qq.com/s/4pi1OZx8So6GjHD6yxjB3Q

3.方法重寫 VS 方法重載

方法重寫和方法重載的具體不同,主要體現在以下 6 個方面:

區別 方法重寫 方法重載
方法關系 描述的是父類和子類的方法關系 描述的是同一個類中多個同名方法的方法關系
Override 關鍵字 需要使用 @Override 關鍵字修飾 不需要
參數類型和參數個數 不能修改 必須修改
返回類型 只能變小或相同,不能變大 可修改
拋出異常 只能變小或刪除,不能拋出新的或者更大的異常 可修改
權限控制符 只能變大,不能變小 可修改

總結

方法重寫(Override)和方法重載(Overload)都是面向對象編程中,多態特性的不同體現,方法重寫描述的是父類和子類的方法關系,而方法重載描述的是同一個類中多個同名方法的方法關系。除此之外方法重寫和方法重載還有:Override 關鍵字、參數類型和參數個數、返回類型、拋出異常和權限控制符等不同點。

本文轉載自微信公眾號「Java面試真題解析」,可以通過以下二維碼關注。轉載本文請聯系Java面試真題解析公眾號。

 

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2022-08-22 07:06:32

MyBatisSQL占位符

2022-02-08 07:02:32

進程線程操作系統

2022-08-15 07:06:50

Propertiesyml配置

2022-08-03 07:04:56

GETHTTPPOST

2022-04-24 07:59:53

synchronizJVMAPI

2022-08-10 07:06:57

IoCDISpring

2023-09-22 22:49:15

C++重載重寫

2023-03-26 21:51:42

2022-04-26 08:02:00

locktryLocklockInterr

2022-05-09 07:37:04

Java非公平鎖公平鎖

2022-10-09 20:52:19

事務隔離級別傳播機制

2022-03-16 07:33:40

守護線程用戶線程語言

2022-08-29 07:05:02

JSRJava語言

2013-07-30 13:35:12

methodfunction

2022-07-18 07:11:35

請求轉發請求重定數據共享

2020-07-28 07:59:21

線程池SubmitExecute

2019-08-16 10:10:07

hashcodeequalsJava

2021-06-10 18:59:41

Java編程語言

2022-06-13 07:36:06

MySQLInnoDB索引

2022-04-18 07:36:37

TimeUnit線程休眠
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色一级视频 | 久久久久久久久久一区二区 | 日韩三级免费观看 | 国产在线视频一区二区董小宛性色 | 一区二区在线观看av | 国产999精品久久久 午夜天堂精品久久久久 | 久久久久一区二区三区 | 亚洲一区二区中文字幕在线观看 | 欧美激情一区二区三区 | 日韩精品免费 | 日本久久精品视频 | 草久久久| 国产精品国产精品国产专区不卡 | 精品一区二区三区91 | 国产在线精品一区二区三区 | 欧美日本一区 | 美女黄视频网站 | 超碰精品在线观看 | 青青草一区二区三区 | 欧美www在线观看 | 亚洲男人的天堂网站 | 高清国产午夜精品久久久久久 | 日p视频免费看 | 久久国产一区二区 | 99福利视频导航 | 欧美福利影院 | 日韩一区二区在线观看 | 精品三级在线观看 | 欧美不卡网站 | 成人免费视频观看 | 日韩av一区二区在线观看 | 精品综合久久 | 精品久久久久久国产 | 日韩在线中文 | 九九久久精品视频 | 久久精品小短片 | 狠狠入ady亚洲精品经典电影 | 亚洲乱码一区二区 | 国内精品视频在线观看 | 国产精品日韩欧美一区二区三区 | www.久久久久久久久久久久 |