您好,登錄后才能下訂單哦!
本篇內容介紹了“Java多態中繼承的轉型用法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、前言
二、轉型
向上轉型
向下轉型
三、instanceof運算符
instanceof的用處
instanceof的使用格式:
前面我們學習了多態的概述和使用,現在我們來學習前面剩下的轉型問題。
? 向上轉型
?向下轉型
為什么會有轉型呢,前面我們也說到了,多態中的使用前提是有父類引用指向子類對象
還有多態的缺點就是不能訪問子類對象。(可以用到向下轉型訪問)
?其實多態中的父類引用指向子類對象就是向下轉型,向下轉型就是子到父。
就是將子類所申請的空間賦值給父類。形式: fu f=new zi();
?向下轉型的出現就是為了解決多態中無法訪問子類成員的問題,其實向下轉型本質上
就是強轉,由父到子,父類對象轉化為子類對象。形式:zi z= (zi)f ;
我們看個例子:
在fu類中
public class Fu { public void show(){ System.out.println("fu:1024程序員節"); } public void play(){ System.out.println("fu:1024不見不散"); } }
zi類中
public class Zi extends Fu { @Override public void show() {//重寫fu類中的show方法 super.show(); System.out.println("zi:1024來了呀"); } public void game(){ System.out.println("zi:寫篇博客提提神"); } public void juan(){ System.out.println("zi:全員卷王"); } }
新建一個測試類
public class FuZiDemo { public static void main(String[] args) { Fu f=new Zi();//向上轉型 Zi z=(Zi)f;//向下轉型 z.show(); z.game(); z.juan(); z.play(); } }
通過向上和向下轉型,此時我們可以訪問子類父類全部成員
? 其實雖然直接創建子類對象是非常方便的,但是我們多態的實現條件之一就是有
父類引用指向子類對象(接口的多態暫時不考慮)
public class FuZiDemo { public static void main(String[] args) { Zi z=new Zi();//通過子類直接創建對象 z.show(); z.game(); z.juan(); z.play(); } }
?由上述結果可知,子類對象向上轉型為父類對象是不需要顯示轉換,而父類對象轉化
為子類對象時,需要顯示強制類型轉化。
友情提示:向下轉型還有幾點需要注意的地方:
?①必須保證父類對象是子類的一個實例,否則程序報錯。
?②向下轉型的對象可以訪問父類中的成員和方法,也可以訪問子類中的成員和方法。
public class Demo11 { public static void main(String[] args) { Animal a=new Dog(); Dog g=(Dog)a; Cat c=(Cat)a;//??能否成功 } }
?上述代碼中,父類對象a引用的是子類Dog對象,而不是Cat類對象,可以將a強
制轉化為Dog類型,不能a強制轉化為Cat類型,因為向下轉型必須確保父類對象是
子類的一個實例所以這個程序不能成功,且在運行時會出現轉換異常的警告。
?由上可知,向下轉型必須確包父類對象是子類的一個實例,否則程序會異常,
instanceof 就是為了確保向下轉型不出現異常。instanceof運算符用來在運行時
指出對象是否是特定類的一個實例
?對象名 instanceof 類名
?instanceof返回一個布爾值來指出這個對象是否是這個特定類或者使他的子類的
一個實例。返回true則是,反之則不是。
public class Demo11 { public static void main(String[] args) { Animal a=new Dog(); if(a instanceof Dog){ Dog g=(Dog)a; } if( a instanceof Cat){//判斷作用 Cat c=(Cat)a; } } }
?所以我們在進行向下轉型之前采用instanceof運算符可以避免一些問題。
“Java多態中繼承的轉型用法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。