真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中向上轉(zhuǎn)型與向下轉(zhuǎn)型的區(qū)別有什么

Java中向上轉(zhuǎn)型與向下轉(zhuǎn)型的區(qū)別有什么?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

創(chuàng)新互聯(lián)公司長(zhǎng)期為上1000家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為札達(dá)企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,札達(dá)網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

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

轉(zhuǎn)型是在繼承的基礎(chǔ)上而言的,繼承是面向?qū)ο笳Z(yǔ)言中,代碼復(fù)用的一種機(jī)制,通過(guò)繼承,子類(lèi)可以復(fù)用父類(lèi)的功能,如果父類(lèi)不能滿(mǎn)足當(dāng)前子類(lèi)的需求,則子類(lèi)可以重寫(xiě)父類(lèi)中的方法來(lái)加以擴(kuò)展。

向上轉(zhuǎn)型:子類(lèi)引用的對(duì)象轉(zhuǎn)換為父類(lèi)類(lèi)型稱(chēng)為向上轉(zhuǎn)型。通俗地說(shuō)就是是將子類(lèi)對(duì)象轉(zhuǎn)為父類(lèi)對(duì)象。此處父類(lèi)對(duì)象可以是接口

向下轉(zhuǎn)型:父類(lèi)引用的對(duì)象轉(zhuǎn)換為子類(lèi)類(lèi)型稱(chēng)為向下轉(zhuǎn)型。

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

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

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

實(shí)例如下:

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中沒(méi)有定義fly方法。

}

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

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

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

實(shí)例如下:

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)型,編譯和運(yùn)行皆不會(huì)出錯(cuò)

          mmg.smile();

          mmg.c();

          Girl g2=new Girl();

      //MMGirl mmg1=(MMGirl)g2; //不安全的向下轉(zhuǎn)型,編譯無(wú)錯(cuò)但會(huì)運(yùn)行會(huì)出錯(cuò)

      //mmg1.smile();

      //mmg1.c();

          if(g2 instanceof MMGirl){

              MMGirl mmg1=(MMGirl)g2;

              mmg1.smile();

              mmg1.c();

          }

     }

總結(jié):

1、父類(lèi)引用可以指向子類(lèi)對(duì)象,子類(lèi)引用不能指向父類(lèi)對(duì)象。

2、把子類(lèi)對(duì)象直接賦給父類(lèi)引用叫upcasting向上轉(zhuǎn)型,向上轉(zhuǎn)型不用強(qiáng)制轉(zhuǎn)型。

如Father father = new Son();

3、把指向子類(lèi)對(duì)象的父類(lèi)引用賦給子類(lèi)引用叫向下轉(zhuǎn)型(downcasting),要強(qiáng)制轉(zhuǎn)型。

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

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

4、upcasting 會(huì)丟失子類(lèi)特有的方法,但是子類(lèi)overriding 父類(lèi)的方法,子類(lèi)方法有效

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

看完上述內(nèi)容,你們掌握J(rèn)ava中向上轉(zhuǎn)型與向下轉(zhuǎn)型的區(qū)別有什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


本文名稱(chēng):Java中向上轉(zhuǎn)型與向下轉(zhuǎn)型的區(qū)別有什么
文章分享:http://weahome.cn/article/jhggid.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部