国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Java 向上轉型和向下轉型的詳解

2019-10-23 18:29:55
字體:
來源:轉載
供稿:網友

 Java 向上轉型和向下轉型的詳解

轉型是在繼承的基礎上而言的,繼承是面向對象語言中,代碼復用的一種機制,通過繼承,子類可以復用父類的功能,如果父類不能滿足當前子類的需求,則子類可以重寫父類中的方法來加以擴展。

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

向下轉型:父類引用的對象轉換為子類類型稱為向下轉型。

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

轉型需要注意的問題:

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

實例如下:

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(); //向上轉型          b.eat();     b.fly(); //此處提示在Animal中沒有定義fly方法。}

在向下轉型過程中,分為兩種情況:

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

情況二:如果父類引用的對象是父類本身,那么在向下轉型的過程中是不安全的,編譯不會出錯,但是運行時會出現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(); //向上轉型          g1.smile();          MMGirl mmg=(MMGirl)g1;  //向下轉型,編譯和運行皆不會出錯          mmg.smile();          mmg.c();          Girl g2=new Girl();      //MMGirl mmg1=(MMGirl)g2; //不安全的向下轉型,編譯無錯但會運行會出錯      //mmg1.smile();      //mmg1.c();          if(g2 instanceof MMGirl){              MMGirl mmg1=(MMGirl)g2;              mmg1.smile();              mmg1.c();          }     }

總結:

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

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

   如Father father = new Son();

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

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

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

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

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

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霸州市| 五大连池市| 牙克石市| 花莲市| 琼结县| 新田县| 宝山区| 邮箱| 嘉祥县| 新和县| 米脂县| 杭州市| 永清县| 理塘县| 乐至县| 莱阳市| 四平市| 平罗县| 石城县| 泽普县| 温宿县| 昌黎县| 黄石市| 奇台县| 海盐县| 千阳县| 杭锦后旗| 呼和浩特市| 北海市| 宁武县| 祁门县| 通化市| 定西市| 景洪市| 鄄城县| 常宁市| 武威市| 鄂托克旗| 巨野县| 伊春市| 郎溪县|