溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java多態(tài)中繼承的轉(zhuǎn)型用法是什么

發(fā)布時(shí)間:2021-10-26 14:36:07 來源:億速云 閱讀:138 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Java多態(tài)中繼承的轉(zhuǎn)型用法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目錄
  • 一、前言

  • 二、轉(zhuǎn)型

    • 向上轉(zhuǎn)型

    • 向下轉(zhuǎn)型

  • 三、instanceof運(yùn)算符

    • instanceof的用處

    • instanceof的使用格式:

一、前言

前面我們學(xué)習(xí)了多態(tài)的概述和使用,現(xiàn)在我們來學(xué)習(xí)前面剩下的轉(zhuǎn)型問題。

二、轉(zhuǎn)型

? 向上轉(zhuǎn)型

?向下轉(zhuǎn)型

為什么會(huì)有轉(zhuǎn)型呢,前面我們也說到了,多態(tài)中的使用前提是有父類引用指向子類對(duì)象

還有多態(tài)的缺點(diǎn)就是不能訪問子類對(duì)象。(可以用到向下轉(zhuǎn)型訪問)

向上轉(zhuǎn)型

?其實(shí)多態(tài)中的父類引用指向子類對(duì)象就是向下轉(zhuǎn)型,向下轉(zhuǎn)型就是子到父。

就是將子類所申請(qǐng)的空間賦值給父類。形式: fu f=new zi();

向下轉(zhuǎn)型

?向下轉(zhuǎn)型的出現(xiàn)就是為了解決多態(tài)中無法訪問子類成員的問題,其實(shí)向下轉(zhuǎn)型本質(zhì)上

就是強(qiáng)轉(zhuǎn),由父到子,父類對(duì)象轉(zhuǎn)化為子類對(duì)象。形式:zi z= (zi)f ;

我們看個(gè)例子:

在fu類中

public class Fu {
  public   void show(){
        System.out.println("fu:1024程序員節(jié)");
    }
  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:全員卷王");
    }
}

新建一個(gè)測(cè)試類

public class FuZiDemo {
    public static void main(String[] args) {
        Fu f=new Zi();//向上轉(zhuǎn)型
        Zi z=(Zi)f;//向下轉(zhuǎn)型
        z.show();
        z.game();
        z.juan();
        z.play();
    }
}

通過向上和向下轉(zhuǎn)型,此時(shí)我們可以訪問子類父類全部成員

Java多態(tài)中繼承的轉(zhuǎn)型用法是什么

? 其實(shí)雖然直接創(chuàng)建子類對(duì)象是非常方便的,但是我們多態(tài)的實(shí)現(xiàn)條件之一就是有

父類引用指向子類對(duì)象(接口的多態(tài)暫時(shí)不考慮)

public class FuZiDemo {
    public static void main(String[] args) {
 
        Zi z=new Zi();//通過子類直接創(chuàng)建對(duì)象
        z.show();
        z.game();
        z.juan();
        z.play();
 
    }
}

?由上述結(jié)果可知,子類對(duì)象向上轉(zhuǎn)型為父類對(duì)象是不需要顯示轉(zhuǎn)換,而父類對(duì)象轉(zhuǎn)化

為子類對(duì)象時(shí),需要顯示強(qiáng)制類型轉(zhuǎn)化。

友情提示:向下轉(zhuǎn)型還有幾點(diǎn)需要注意的地方:

?①必須保證父類對(duì)象是子類的一個(gè)實(shí)例,否則程序報(bào)錯(cuò)。

?②向下轉(zhuǎn)型的對(duì)象可以訪問父類中的成員和方法,也可以訪問子類中的成員和方法。

public class Demo11 {
    public static void main(String[] args) {
     Animal a=new Dog();
      Dog g=(Dog)a;
     Cat c=(Cat)a;//??能否成功
 
    }
}

?上述代碼中,父類對(duì)象a引用的是子類Dog對(duì)象,而不是Cat類對(duì)象,可以將a強(qiáng)

制轉(zhuǎn)化為Dog類型,不能a強(qiáng)制轉(zhuǎn)化為Cat類型,因?yàn)橄蛳罗D(zhuǎn)型必須確保父類對(duì)象是

子類的一個(gè)實(shí)例所以這個(gè)程序不能成功,且在運(yùn)行時(shí)會(huì)出現(xiàn)轉(zhuǎn)換異常的警告。

三、instanceof運(yùn)算符

instanceof的用處

?由上可知,向下轉(zhuǎn)型必須確包父類對(duì)象是子類的一個(gè)實(shí)例,否則程序會(huì)異常,

instanceof 就是為了確保向下轉(zhuǎn)型不出現(xiàn)異常。instanceof運(yùn)算符用來在運(yùn)行時(shí)

指出對(duì)象是否是特定類的一個(gè)實(shí)例

instanceof的使用格式:

?對(duì)象名 instanceof 類名

?instanceof返回一個(gè)布爾值來指出這個(gè)對(duì)象是否是這個(gè)特定類或者使他的子類的

一個(gè)實(shí)例。返回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;
      }
    }
}

?所以我們?cè)谶M(jìn)行向下轉(zhuǎn)型之前采用instanceof運(yùn)算符可以避免一些問題。

“Java多態(tài)中繼承的轉(zhuǎn)型用法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI