最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 函數(shù)的重載和重寫實例代碼

 更新時間:2016年07月20日 11:48:06   投稿:lqh  
本文主要介紹Java 的重載和重寫,學習java的同學都知道Java的多態(tài)有多重要,這里給大家舉例說明函數(shù)的重載和重寫,希望能幫助有需要的小伙伴

在java中多態(tài)分為兩種編譯時多態(tài)(重載)和運行時多態(tài)(重寫),編譯時多態(tài)又叫前綁定,運行時多態(tài)又叫后綁定。

下面用一個例子說明:

public class OverloadAndOverwrite { 
  public static void main(String[] args) { 
    A a1 = new A(); 
    A a2 = new B(); 
    B b = new B(); 
    C c = new C(); 
    D d = new D(); 
    System.out.print("a1.print(a1): "); 
    a1.print(a1);//輸出A and A 
    System.out.print("a1.print(b): "); 
    a1.print(b);//輸出A and A:原因是因為A中不存在參數(shù)為B的方法,因此會調(diào)用參數(shù)為A的方法,因為B是繼承自A的 
    System.out.print("a1.print(c): "); 
    a1.print(c);//輸出A and A:原因是因為A中不存在參數(shù)為C的方法,因此會調(diào)用參數(shù)為A的方法,因為C是繼承自B的,B是繼承自A的 
    System.out.print("a1.print(d): "); 
    a1.print(d);//輸出A and D:原因是因為A中存在參數(shù)為D的方法,因此會調(diào)用參數(shù)為D的方法 
    System.out.print("a2.print(b): "); 
    a2.print(b);//輸出B and A:原因在于首先入口是A,首先查看A中是否有參數(shù)為B的print方法,發(fā)現(xiàn)沒有那就尋找有沒有參數(shù)為A的方法,因為B是繼承自A的,發(fā)現(xiàn)存在這樣的方法,那么再次查看B中有沒有重寫這個方法,發(fā)現(xiàn)有重新,直接調(diào)用B中這個重寫的方法 
    System.out.print("a2.print(c): "); 
    a2.print(c);//輸出B and A:原因在于首先入口是A,首先查看A中是否有參數(shù)為C的print方法,發(fā)現(xiàn)沒有那就尋找有沒有參數(shù)為B的方法,因為C是繼承自B的,發(fā)現(xiàn)也不存在這樣的方法,那就尋找存在參數(shù)為A的print方法,因為B繼承自A,發(fā)現(xiàn)存在這樣的方法,那么再次查看B中有沒有重寫這個方法,發(fā)現(xiàn)有重新,直接調(diào)用B中這個重寫的方法 
    System.out.print("a2.print(d): "); 
    a2.print(d);//輸出 A and D:原因在于入口是A,查看A中存在參數(shù)為D的方法,再次查看B中沒有重寫這個方法,因此輸出A中這個方法的結(jié)果即可; 
    System.out.print("a2.print(a2): "); 
    a2.print(a2);//輸出B and A;原因在于a2的類型是A,因此會調(diào)用A里面參數(shù)為A的print方法,但是a2右邊new的是B,所以因為B中有參數(shù)為A的方法,因此采用的是B里面的這個方法 
    System.out.print("b.print(b): "); 
    b.print(b);//輸出B and B;原因:入口是B,因此查看B中存不存在參數(shù)為B的print函數(shù),存在則直接輸出; 
    System.out.print("b.print(c): "); 
    b.print(c);//輸出B and B;原因:入口是B,因此查看B中存不存在參數(shù)為C的print函數(shù),發(fā)現(xiàn)不存在,則查看存不存在參數(shù)為B的print函數(shù),發(fā)現(xiàn)存在,并且C中并沒有重寫該方法,則直接輸出;有一點需要注意的是還需要查看一下A中是否存在參數(shù)為C的print方法,因為B繼承自A,有的話會及成果來這個方法,這樣的話輸出的結(jié)果將變?yōu)锳 and C 
    System.out.print("b.print(d): "); 
    b.print(d);//輸出A and D;原因:入口是B,雖然B中不存在參數(shù)為D的print函數(shù),但是B繼承自A,A中是存在參數(shù)為D的print函數(shù)的,因此輸出的是A中參數(shù)為D的結(jié)果; 
  } 
} 
class A 
{ 
  public void print(A a) 
  { 
    System.out.println("A and A"); 
  } 
  public void print(D d) 
  { 
    System.out.println("A and D"); 
  } 
// public void print(C c) 
// { 
//   System.out.println("A and C"); 
// } 
} 
class B extends A 
{ 
  public void print(B b) 
  { 
    System.out.println("B and B"); 
  } 
  public void print(A a) 
  { 
    System.out.println("B and A"); 
  } 
} 
class C extends B{} 
class D extends C{} 

在此需要說明的是:

對于 A a2 = new B( );

 如果單獨打印出a2的話,打印結(jié)果是B@(hash碼),而不是A@(hash碼),但這并不能說明a2的類型是B類型的,因為當我們在上面程序中調(diào)用a2.print(a2);的時候輸出的結(jié)果是B and A而不是A and A(如果假設(shè)a2是B類型的話,就應(yīng)該調(diào)用A類中參數(shù)為B的print方法,因為不存在這樣的方法,那么退而求其次調(diào)用參數(shù)為A的方法就應(yīng)該輸出A and A了,因為B是A的子類)。

以上就是對重寫和重載的實例代碼分析,希望對Java學習的同學有幫助。

相關(guān)文章

  • POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析

    POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析

    這篇文章主要介紹了POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中的HashMap源碼分析

    Java中的HashMap源碼分析

    這篇文章主要介紹了Java中的HashMap源碼分析,散列表是根據(jù)關(guān)鍵碼值(Key?value)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu),也就是說,它通過把關(guān)鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度,這個映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表,需要的朋友可以參考下
    2023-09-09
  • Java Maven高級之插件開發(fā)詳解

    Java Maven高級之插件開發(fā)詳解

    這篇文章主要介紹了Maven 插件開發(fā)的詳細整理的相關(guān)資料,需要的朋友可以看下,希望能夠給你帶來幫助
    2021-09-09
  • 關(guān)于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則

    關(guān)于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則

    這篇文章主要介紹了關(guān)于@ComponentScan?TypeFilter自定義指定掃描bean的規(guī)則,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 深入了解SparkSQL的運用及方法

    深入了解SparkSQL的運用及方法

    SparkSQL就是將SQL轉(zhuǎn)換成一個任務(wù),提交到集群上運行,類似于Hive的執(zhí)行方式。本文給大家分享了SparkSQl的運用及方法,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • Spring Boot 緩存 Cache 入門詳解

    Spring Boot 緩存 Cache 入門詳解

    本文主要介紹SpringBoot緩存的入門知識,包括緩存的必要性、常見的緩存策略、SpringCache的注解使用、SpringBoot與緩存的集成以及Ehcache和Redis的示例,同時,還提供了緩存面試問題的思路和答案,幫助讀者更好地理解和掌握SpringBoot緩存的相關(guān)內(nèi)容,感興趣的朋友一起看看吧
    2025-03-03
  • java解析dbf之通過javadbf包生成和讀取dbf文件

    java解析dbf之通過javadbf包生成和讀取dbf文件

    這篇文章主要介紹了java通過javadbf讀取和生成DBF文件的方法,大家參考使用吧
    2014-01-01
  • Springboot詳細講解RocketMQ實現(xiàn)順序消息的發(fā)送與消費流程

    Springboot詳細講解RocketMQ實現(xiàn)順序消息的發(fā)送與消費流程

    RocketMQ作為一款純java、分布式、隊列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時消息、消息回溯等,本篇我們了解如何實現(xiàn)順序消息的發(fā)送與消費
    2022-06-06
  • Java中的StringUtils引入及使用示例教程

    Java中的StringUtils引入及使用示例教程

    這篇文章主要介紹了Java中的StringUtils引入及使用示例教程,本文結(jié)合示例代碼給大家介紹的非常詳細,介紹了java中StringUtils用法,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • Java軟件設(shè)計模式之橋接模式詳解

    Java軟件設(shè)計模式之橋接模式詳解

    這篇文章主要介紹了Java軟件設(shè)計模式之橋接模式詳解,橋接模式也叫做橋梁模式,結(jié)構(gòu)型設(shè)計模式的一種,顧名思義,就是用來連接兩個部分,為被分離了的抽象部分和實現(xiàn)部分搭橋,需要的朋友可以參考下
    2023-07-07

最新評論

彝良县| 滨海县| 丰台区| 东乡县| 红安县| 重庆市| 咸丰县| 弋阳县| 武宣县| 四平市| 丘北县| 桑植县| 石嘴山市| 札达县| 万山特区| 鹰潭市| 杭锦后旗| 石棉县| 浠水县| 石楼县| 奉化市| 当涂县| 滨州市| 乳山市| 利津县| 黎川县| 吉隆县| 雅江县| 浑源县| 漾濞| 天峻县| 噶尔县| 陈巴尔虎旗| 隆安县| 安溪县| 汾西县| 大关县| 顺义区| 南陵县| 中牟县| 台山市|