java 子类 父类 转换_Java子类与父类之间的类型转换
1.向上轉(zhuǎn)換
父類(lèi)的引用變量指向子類(lèi)變量時(shí),子類(lèi)對(duì)象向父類(lèi)對(duì)象向上轉(zhuǎn)換。從子類(lèi)向父類(lèi)的轉(zhuǎn)換不需要什么限制,只需直接蔣子類(lèi)實(shí)例賦值給父類(lèi)變量即可,這也是Java中多態(tài)的實(shí)現(xiàn)機(jī)制。
2.向下轉(zhuǎn)換
在父類(lèi)變量調(diào)用子類(lèi)特有的、不是從父類(lèi)繼承來(lái)的方法和變量時(shí),需要父類(lèi)變量向子類(lèi)轉(zhuǎn)換。
為什么要向下轉(zhuǎn)換?
在繼承關(guān)系中,有一些方法是不適合由父類(lèi)定義并由子類(lèi)繼承并重寫(xiě)的,有些方法是子類(lèi)特有的,不應(yīng)該通過(guò)繼承得到,且子類(lèi)可能也會(huì)有自己特有的成員變量,那么在使用多態(tài)機(jī)制的時(shí)候,若我們要通過(guò)父類(lèi)型變量使用到這些子類(lèi)特有的方法和屬性的話,就需要將服類(lèi)型變量轉(zhuǎn)換成對(duì)應(yīng)的子類(lèi)型變量。一個(gè)典型例子便是標(biāo)準(zhǔn)庫(kù)中的數(shù)據(jù)類(lèi)型包裝類(lèi):Integer類(lèi),Double類(lèi),Long類(lèi)等,它們都繼承自Number類(lèi),且它們都有一個(gè)方法叫做compareTo用于比較兩個(gè)同樣的類(lèi)型。然而這個(gè)方法是這些子類(lèi)通過(guò)實(shí)現(xiàn)Comparable接口來(lái)實(shí)現(xiàn)的,在Number類(lèi)中并沒(méi)有該方法的實(shí)現(xiàn),因此若要通過(guò)Number類(lèi)型變量來(lái)使用compareTo方法,就要先將Number類(lèi)轉(zhuǎn)換成子類(lèi)的對(duì)象。
注意
父類(lèi)變量向子類(lèi)轉(zhuǎn)換必須通過(guò)顯式強(qiáng)制類(lèi)型轉(zhuǎn)換,采取和向上轉(zhuǎn)換相同的直接賦值方式是不行的;并且,當(dāng)把一個(gè)父類(lèi)型變量實(shí)例轉(zhuǎn)換為子類(lèi)型變量時(shí),必須確保該父類(lèi)變量是子類(lèi)的一個(gè)實(shí)例,從繼承鏈的角度來(lái)理解這些原因:子類(lèi)一定是父類(lèi)的一個(gè)實(shí)例,然而父類(lèi)卻不一定是子類(lèi)的實(shí)例。在進(jìn)行父類(lèi)向子類(lèi)的轉(zhuǎn)換時(shí),一個(gè)好的習(xí)慣是通過(guò)instanceof運(yùn)算符來(lái)判斷父類(lèi)變量是否是該子類(lèi)的一個(gè)實(shí)例,否則在運(yùn)行時(shí)會(huì)拋出運(yùn)行異常ClassCastException,表示類(lèi)轉(zhuǎn)換異常。
總結(jié)
以上是生活随笔為你收集整理的java 子类 父类 转换_Java子类与父类之间的类型转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解读《百度网页质量白皮书》潜台词
- 下一篇: android日记功能的实现6,我的an