亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

下面用一個(gè)例子說明:

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:原因是因?yàn)锳中不存在參數(shù)為B的方法,因此會(huì)調(diào)用參數(shù)為A的方法,因?yàn)锽是繼承自A的 
    System.out.print("a1.print(c): "); 
    a1.print(c);//輸出A and A:原因是因?yàn)锳中不存在參數(shù)為C的方法,因此會(huì)調(diào)用參數(shù)為A的方法,因?yàn)镃是繼承自B的,B是繼承自A的 
    System.out.print("a1.print(d): "); 
    a1.print(d);//輸出A and D:原因是因?yàn)锳中存在參數(shù)為D的方法,因此會(huì)調(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的方法,因?yàn)锽是繼承自A的,發(fā)現(xiàn)存在這樣的方法,那么再次查看B中有沒有重寫這個(gè)方法,發(fā)現(xiàn)有重新,直接調(diào)用B中這個(gè)重寫的方法 
    System.out.print("a2.print(c): "); 
    a2.print(c);//輸出B and A:原因在于首先入口是A,首先查看A中是否有參數(shù)為C的print方法,發(fā)現(xiàn)沒有那就尋找有沒有參數(shù)為B的方法,因?yàn)镃是繼承自B的,發(fā)現(xiàn)也不存在這樣的方法,那就尋找存在參數(shù)為A的print方法,因?yàn)锽繼承自A,發(fā)現(xiàn)存在這樣的方法,那么再次查看B中有沒有重寫這個(gè)方法,發(fā)現(xiàn)有重新,直接調(diào)用B中這個(gè)重寫的方法 
    System.out.print("a2.print(d): "); 
    a2.print(d);//輸出 A and D:原因在于入口是A,查看A中存在參數(shù)為D的方法,再次查看B中沒有重寫這個(gè)方法,因此輸出A中這個(gè)方法的結(jié)果即可; 
    System.out.print("a2.print(a2): "); 
    a2.print(a2);//輸出B and A;原因在于a2的類型是A,因此會(huì)調(diào)用A里面參數(shù)為A的print方法,但是a2右邊new的是B,所以因?yàn)锽中有參數(shù)為A的方法,因此采用的是B里面的這個(gè)方法 
    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中并沒有重寫該方法,則直接輸出;有一點(diǎn)需要注意的是還需要查看一下A中是否存在參數(shù)為C的print方法,因?yàn)锽繼承自A,有的話會(huì)及成果來這個(gè)方法,這樣的話輸出的結(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{} 

在此需要說明的是:

對(duì)于 A a2 = new B( );

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

以上就是對(duì)重寫和重載的實(shí)例代碼分析,希望對(duì)Java學(xué)習(xí)的同學(xué)有幫助。

相關(guān)文章

  • springboot?log4j2日志框架整合與使用過程解析

    springboot?log4j2日志框架整合與使用過程解析

    這篇文章主要介紹了springboot?log4j2日志框架整合與使用,包括引入maven依賴和添加配置文件log4j2-spring.xml的相關(guān)知識(shí),需要的朋友可以參考下
    2022-05-05
  • Java8的Lambda遍歷兩個(gè)List匹配數(shù)據(jù)方式

    Java8的Lambda遍歷兩個(gè)List匹配數(shù)據(jù)方式

    這篇文章主要介紹了Java8的Lambda遍歷兩個(gè)List匹配數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • HashSet工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    HashSet工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    HashSet 底層采用 HashMap 來保存所有元素,因此 HashSet 的實(shí)現(xiàn)比較簡單。接下來通過本文給大家介紹HashSet工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下
    2017-04-04
  • Mybatis把返回結(jié)果封裝成map類型的實(shí)現(xiàn)

    Mybatis把返回結(jié)果封裝成map類型的實(shí)現(xiàn)

    本文主要介紹了Mybatis把返回結(jié)果封裝成map類型的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • java省市級(jí)聯(lián)下拉菜單實(shí)例代碼

    java省市級(jí)聯(lián)下拉菜單實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了java省市級(jí)聯(lián)實(shí)例代碼,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2016-05-05
  • Java語言之包和繼承詳解

    Java語言之包和繼承詳解

    這篇文章主要介紹了java的包和繼承,結(jié)合實(shí)例形式詳細(xì)分析了Java繼承的概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2021-09-09
  • Java實(shí)現(xiàn)簡單小畫板

    Java實(shí)現(xiàn)簡單小畫板

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單小畫板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Spring中Bean的三種實(shí)例化方式詳解

    Spring中Bean的三種實(shí)例化方式詳解

    這篇文章主要給大家介紹了關(guān)于Spring中實(shí)例化bean的三種方式:構(gòu)造方法、靜態(tài)工廠和實(shí)例工廠,對(duì)我們學(xué)習(xí)有一定的參考價(jià)值,需要的小伙伴可以了解一下
    2022-06-06
  • MyBatis批量插入(insert)數(shù)據(jù)操作

    MyBatis批量插入(insert)數(shù)據(jù)操作

    本文給大家分享MyBatis批量插入(insert)數(shù)據(jù)操作知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • java通過DelayQueue實(shí)現(xiàn)延時(shí)任務(wù)

    java通過DelayQueue實(shí)現(xiàn)延時(shí)任務(wù)

    本文主要介紹了java通過DelayQueue實(shí)現(xiàn)延時(shí)任務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論