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

Java 向上轉(zhuǎn)型和向下轉(zhuǎn)型的詳解

 更新時間:2021年12月22日 11:48:05   投稿:lqh  
這篇文章主要介紹了 Java 向上轉(zhuǎn)型和向下轉(zhuǎn)型的詳解的相關資料,需要的朋友可以參考下

?Java 向上轉(zhuǎn)型和向下轉(zhuǎn)型的詳解

轉(zhuǎn)型是在繼承的基礎上而言的,繼承是面向?qū)ο笳Z言中,代碼復用的一種機制,通過繼承,子類可以復用父類的功能,如果父類不能滿足當前子類的需求,則子類可以重寫父類中的方法來加以擴展。

向上轉(zhuǎn)型:子類引用的對象轉(zhuǎn)換為父類類型稱為向上轉(zhuǎn)型。通俗地說就是是將子類對象轉(zhuǎn)為父類對象。此處父類對象可以是接口

向下轉(zhuǎn)型:父類引用的對象轉(zhuǎn)換為子類類型稱為向下轉(zhuǎn)型。

前者是一個向上轉(zhuǎn)型,Animal dog 引用指向new Dog();子類對象當成父類對象,只能調(diào)用父類的成員,如果子類重寫了父類的方法就根據(jù)這個引用指向調(diào)用子類重寫的這個方法(這個方法就是覆蓋override)。這個調(diào)用過程就稱為“動態(tài)綁定”。

轉(zhuǎn)型需要注意的問題:

向上轉(zhuǎn)型時,父類指向子類引用對象會遺失除與父類對象共有的其他方法,也就是在轉(zhuǎn)型過程中,子類的新有的方法都會遺失掉,在編譯時,系統(tǒng)會提供找不到方法的錯誤。

實例如下:

public class Animal {

     public void eat(){

          System.out.println("animal eatting...");

     }

}

class Bird extends Animal{

     public void eat(){

          System.out.println("bird eatting...");

     }

     public void fly(){

          System.out.println("bird flying...");

     }

}

class Main{   

     public static void main(String[] args) {

          Animal b=new Bird(); //向上轉(zhuǎn)型

          b.eat();

     b.fly(); //此處提示在Animal中沒有定義fly方法。

}

在向下轉(zhuǎn)型過程中,分為兩種情況:

情況一:如果父類引用的對象如果引用的是指向的子類對象,那么在向下轉(zhuǎn)型的過程中是安全的。也就是編譯是不會出錯誤的。

情況二:如果父類引用的對象是父類本身,那么在向下轉(zhuǎn)型的過程中是不安全的,編譯不會出錯,但是運行時會出現(xiàn)java.lang.ClassCastException錯誤。它可以使用instanceof來避免出錯此類錯誤。

實例如下:

public class Girl {

     public void smile(){

          System.out.println("girl smile()...");

     }

}

class MMGirl extends Girl{

          @Override

     public void smile() {

                   System.out.println("MMirl smile sounds sweet...");

     }

     public void c(){

          System.out.println("MMirl c()...");

     }

}

class main{

          public static void main(String[] args) {

          Girl g1=new MMGirl(); //向上轉(zhuǎn)型

          g1.smile();

          MMGirl mmg=(MMGirl)g1;  //向下轉(zhuǎn)型,編譯和運行皆不會出錯

          mmg.smile();

          mmg.c();

          Girl g2=new Girl();

      //MMGirl mmg1=(MMGirl)g2; //不安全的向下轉(zhuǎn)型,編譯無錯但會運行會出錯

      //mmg1.smile();

      //mmg1.c();

          if(g2 instanceof MMGirl){

              MMGirl mmg1=(MMGirl)g2;

              mmg1.smile();

              mmg1.c();

          }

     }

總結(jié):

1、父類引用可以指向子類對象,子類引用不能指向父類對象。

2、把子類對象直接賦給父類引用叫upcasting向上轉(zhuǎn)型,向上轉(zhuǎn)型不用強制轉(zhuǎn)型。

   如Father father = new Son();

3、把指向子類對象的父類引用賦給子類引用叫向下轉(zhuǎn)型(downcasting),要強制轉(zhuǎn)型。

   如father就是一個指向子類對象的父類引用,把father賦給子類引用son 即Son son =(Son)father;

   其中father前面的(Son)必須添加,進行強制轉(zhuǎn)換。

4、upcasting 會丟失子類特有的方法,但是子類overriding 父類的方法,子類方法有效

5、向上轉(zhuǎn)型的作用,減少重復代碼,父類為參數(shù),調(diào)有時用子類作為參數(shù),就是利用了向上轉(zhuǎn)型。這樣使代碼變得簡潔。體現(xiàn)了JAVA的抽象編程思想。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • 遠程連接Jedis和整合SpringBoot的詳細過程

    遠程連接Jedis和整合SpringBoot的詳細過程

    這篇文章主要介紹了遠程連接Jedis和整合SpringBoot的詳細過程,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 史上最通俗理解的Java死鎖代碼演示

    史上最通俗理解的Java死鎖代碼演示

    這篇文章主要給大家介紹了關于Java死鎖代碼演示的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • SpringBoot項目為何引入大量的starter?如何自定義starter?

    SpringBoot項目為何引入大量的starter?如何自定義starter?

    這篇文章主要介紹了SpringBoot項目為何引入大量的starter?如何自定義starter?文章基于這兩個問題展開全文,需要的小伙伴可以參考一下
    2022-04-04
  • javaweb實戰(zhàn)之商城項目開發(fā)(一)

    javaweb實戰(zhàn)之商城項目開發(fā)(一)

    這篇文章主要針對javaweb商城項目開發(fā)進行實戰(zhàn)演習,對javaweb商城項目開發(fā)進行詳細分析,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類實例

    Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類實例

    這篇文章主要介紹了Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類,結(jié)合完整實例形式分析了Java日期轉(zhuǎn)換與字符串操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • SpringBoot讀取自定義配置文件方式(properties,yaml)

    SpringBoot讀取自定義配置文件方式(properties,yaml)

    這篇文章主要介紹了SpringBoot讀取自定義配置文件方式(properties,yaml),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 一文講解如何優(yōu)雅的調(diào)試jar包

    一文講解如何優(yōu)雅的調(diào)試jar包

    在現(xiàn)實開發(fā)過程中,現(xiàn)場環(huán)境永遠比開發(fā)環(huán)境復雜,下面這篇文章主要給大家介紹了關于如何優(yōu)雅的調(diào)試jar包的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 詳解Java的Spring框架中bean的定義以及生命周期

    詳解Java的Spring框架中bean的定義以及生命周期

    這篇文章主要介紹了Java的Spring框架中bean的定義以及生命周期,bean的實例化是Java web開發(fā)中的重要基礎,需要的朋友可以參考下
    2015-12-12
  • 如何解決IDEA中JSP頁面部分出現(xiàn)綠色背景色問題

    如何解決IDEA中JSP頁面部分出現(xiàn)綠色背景色問題

    這篇文章主要介紹了如何解決IDEA中JSP頁面部分出現(xiàn)綠色背景色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java實現(xiàn)簡單的遞歸操作方法實例

    Java實現(xiàn)簡單的遞歸操作方法實例

    這篇文章主要給大家介紹了關于Java實現(xiàn)簡單的遞歸操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02

最新評論

德惠市| 吐鲁番市| 华亭县| 衡东县| 莎车县| 棋牌| 如皋市| 渭源县| 常山县| 罗源县| 大足县| 万安县| 安陆市| 乐业县| 洛阳市| 尼勒克县| 施秉县| 锦州市| 蚌埠市| 霍林郭勒市| 崇义县| 米脂县| 贡觉县| 林西县| 北碚区| 延边| 景德镇市| 诸城市| 长宁区| 乐亭县| 方正县| 洪江市| 贵溪市| 永州市| 香港 | 安宁市| 曲松县| 南华县| 江陵县| 河南省| 滨海县|