一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 多態中繼承的轉型詳解與用法分析

Java 多態中繼承的轉型詳解與用法分析

2022-03-01 00:42執久呀 Java教程

繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為

一、前言

前面我們學習了多態的概述和使用,現在我們來學習前面剩下的轉型問題。

二、轉型

向上轉型

向下轉型

為什么會有轉型呢,前面我們也說到了,多態中的使用前提是有父類引用指向子類對象

還有多態的缺點就是不能訪問子類對象。(可以用到向下轉型訪問)

向上轉型

其實多態中的父類引用指向子類對象就是向下轉型,向下轉型就是子到父。

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

向下轉型

向下轉型的出現就是為了解決多態中無法訪問子類成員的問題,其實向下轉型本質上

就是強轉,由父到子,父類對象轉化為子類對象。形式:zi z= (zi)f ;

我們看個例子:

在fu類中

?
1
2
3
4
5
6
7
8
public class Fu {
  public   void show(){
        System.out.println("fu:1024程序員節");
    }
  public void play(){
      System.out.println("fu:1024不見不散");
    }
}

zi類中

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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:全員卷王");
    }
}

新建一個測試類

?
1
2
3
4
5
6
7
8
9
10
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();
    }
}

通過向上和向下轉型,此時我們可以訪問子類父類全部成員

Java 多態中繼承的轉型詳解與用法分析

其實雖然直接創建子類對象是非常方便的,但是我們多態的實現條件之一就是有

父類引用指向子類對象(接口的多態暫時不考慮)

?
1
2
3
4
5
6
7
8
9
10
11
public class FuZiDemo {
    public static void main(String[] args) {
 
        Zi z=new Zi();//通過子類直接創建對象
        z.show();
        z.game();
        z.juan();
        z.play();
 
    }
}

由上述結果可知,子類對象向上轉型為父類對象是不需要顯示轉換,而父類對象轉化

為子類對象時,需要顯示強制類型轉化。

友情提示:向下轉型還有幾點需要注意的地方:

①必須保證父類對象是子類的一個實例,否則程序報錯。

②向下轉型的對象可以訪問父類中的成員和方法,也可以訪問子類中的成員和方法。

?
1
2
3
4
5
6
7
8
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運算符用來在運行時

指出對象是否是特定類的一個實例

instanceof的使用格式:

對象名 instanceof 類名

instanceof返回一個布爾值來指出這個對象是否是這個特定類或者使他的子類的

一個實例。返回true則是,反之則不是。

?
1
2
3
4
5
6
7
8
9
10
11
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 多態中繼承的轉型詳解與用法分析的文章就介紹到這了,更多相關Java 多態中繼承的轉型內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_60719453/article/details/120945253

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 西施打开双腿下面好紧 | 亚洲一二三区久久五月天婷婷 | 变态np虐高h | 久久成人永久免费播放 | 草草视频免费在线观看 | 2022天天干| 亚洲 欧美 国产 在线 日韩 | 青青青在线免费 | 欧美一级乱妇老太婆特黄 | 性xxxxbbbbxxxx中国 | av91在线| 精品福利一区二区免费视频 | 国产在线欧美日韩精品一区二区 | 成人精品福利 | 欧美日韩一区二区三区免费 | 99精品国产自产在线观看 | 91精品啪在线观看国产线免费 | 精品高潮呻吟99AV无码 | 国产日产韩产麻豆1区 | 波多野结衣 在线 | 人人澡 人人澡碰人人看软件 | 国内自拍2019 | 日韩免费一级毛片 | 娇妻与老头绿文小说系列 | avtt手机版| 91无套极品外围在线播放 | 亚洲视频在线观看地址 | 亚洲国产精品91 | 亚洲欧美日韩国产精品一区 | asianfemdom妍妍女王 | 青青青青久久国产片免费精品 | 给我免费的视频在线观看 | 性关系视频免费网站在线观看 | 美女的隐私无遮挡撒尿 | 天堂素人在线 | 网www天堂资源在线 王淑兰与铁柱全文免费阅读 | 学生小泬无遮挡女HD | 午夜深情在线观看免费 | 国产人妖xxxxx免费看 | 欧美vpswindowssex| 91色香sxmv最网页版新地址 |