搜尋
首頁JavaJava入門java物件導向-多態的詳細介紹

java物件導向-多態的詳細介紹

Nov 30, 2019 pm 02:21 PM
java多態性物件導向

java物件導向-多態的詳細介紹

一、概述​​

多態是繼封裝、繼承之後,物件導向的第三大特性。

生活中,例如跑步的動作,小貓、小狗和大象,跑起來是不一樣的。再例如飛的動作,昆蟲、鳥類和飛機,飛起來也是不一樣的。可見,同一行為,透過不同的事物,可以體現出來的不同的形態。多態,描述的就是這樣的狀態。

多態:

是指相同行為,具有多個不同表現形式。

前提【重點】

1.繼承或實作【二選一】

2.方法的重寫【意義體現:不重寫寫,無意義】

3.父類別引用指向子類別物件【格式體現】

免費線上學習影片推薦:java影片

#二、多態的體現

多型體現的格式:

父类类型 变量名 = new 子类对象; 
变量名.方法名();

父類別類型:指子類別物件繼承的父類別類型,或是實現的父接口類型。

程式碼如下:

Fu f = new Zi(); 
f.method();

當使用多態方式呼叫方法時,首先檢查父類別中是否有該方法,如果沒有,則編譯錯誤;如果有,執行的是子類別重寫後方法。

程式碼如下:

定義父類別:

java物件導向-多態的詳細介紹

#定義子類別:

java物件導向-多態的詳細介紹

定義測試類別:

java物件導向-多態的詳細介紹

三、多態的好處

實際開發的過程中,父類別作為方法形式參數,傳遞子類別物件給方法,進行方法的調用,更能體現出多態的擴展性與便利性。

程式碼如下:

定義父類別:

java物件導向-多態的詳細介紹

#定義子類別:

java物件導向-多態的詳細介紹

定義測試類別:

public class Test {
    public static void main(String[] args) {
        // 多态形式,创建对象
        // Cat c = new Cat();
        // Dog d = new Dog();

        // 调用showCatEat showCatEat(c);
        // 调用showDogEat
        showDogEat(d);

        /*
        以上两个方法, 均可以被showAnimalEat(Animal a)方法所替代而执行效果一致
        */
        showAnimalEat(c);
        showAnimalEat(d);
    }

    public static void showCatEat(Cat c) {
        c.eat();
    }

    public static void showDogEat(Dog d) {
        d.eat();
    }

    public static void showAnimalEat(Animal a) {
        a.eat();
    }
}

當eat方法執行時,多型規定執行的是子類別重寫的方法,那麼效果自然與showCatEat、showDogEat方法一致, 所以showAnimalEat完全可以取代以上兩方法。

不只是替代,在擴充性方面,無論之後再多的子類別出現,我們都不需要寫showXxxEat方法了,直接使用showAnimalEat都可以完成。

所以,多態的好處體現在可以讓程式編寫的更簡單,並且有良好的擴充。

四、引用型別轉換

多型態的轉型分為向轉型與向下轉型兩種:

#向上轉型

向轉型:多型態本身就是子類別類型向父類別類型向上轉換的過程,這個過程是預設的。

當父類別引用指向子類別物件時,便是向上轉型。

使用格式:

父类类型 变量名 = new 子类类型(); 
如:Animal a = new Cat();

向下轉型

#父類別類型向子類別類型向下轉換的過程,這個過程是強制的。

一個已經向上轉型的子類對象,將父類引用轉為子類引用,可以使用強制型別轉換的格式,便是向下轉型。

使用格式:

子类类型 变量名 = (子类类型) 父类变量名; 
如 :Cat c =(Cat) a;

轉型演示,程式碼如下:

定義類別:

java物件導向-多態的詳細介紹

定義測試類別:

java物件導向-多態的詳細介紹

轉型的異常

转型的过程中,一不小心就会遇到这样的问题,请看如下代码:

java物件導向-多態的詳細介紹

这段代码可以通过编译,但是运行时,却报出了ClassCastException,类型转换异常!这是因为,明明创建了Cat类型对象,运行时,当然不能转换成Dog对象的。这两个类型并没有任何继承关系,不符合类型转换的定义。

为了避免ClassCastException的发生,Java提供了 关键字,给引用变量做类型的校验。

格式如下:

变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。

所以,转换前,我们最好先做一个判断,代码如下:

java物件導向-多態的詳細介紹

想学习更多相关教程请访问:java入门学习

以上是java物件導向-多態的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境