1. 程式人生 > >《編程導論(Java)·2.1.2 啊,我看到了多態》-什麽是多態(polymorphism)

《編程導論(Java)·2.1.2 啊,我看到了多態》-什麽是多態(polymorphism)

img page ria 使用方法 ride idt void one 標題

1.不明覺厲

很多人學習多態時,會認為技術分享


之所以不明覺厲,由於多態的定義:事物存在的多種表現形態;而後,有人將重載(overload)、改寫(override)、多態變量和泛型歸結於同一個術語“多態”之下。比如:Polymorphism (computer science)


yqj2065覺得:【(前言 page VII)好像孔乙己說“多態這個字有4種寫法”一樣,除了凸顯多態這一術語比較多態外,並沒有理論意義和教學意義,因而本書使用了一個標題——“2.1.2啊,我看見了多態”,使多態術語具有簡潔的語意。】

換言之,有人問你什麽是多態時,希望你能夠簡潔地回答。而不是讓你說:“嗯,多態像水,能夠是霧、彩虹、瀑布……多種表現形態。在計算機科學中分4種。

第一種……”


2.圍觀多態

比如有一場勞動秀,請屠戶(抽象類Butcher)表演其技術。Butcher有子類PlainButcher和TwoBButcher.

    static void show(Butcher b){ //秀一下
        b.kill();       
    }

一般的屠戶——PlainButcher對象,就依照一般的方式殺豬;而個性屠戶——TwoBButcher對象,他殺豬殺屁股。於是。

b.kill();

在執行時有各種各樣的表現或輸出。

  • 多態(polymorphism)是指向消息接收者(多態變量。如b)發送同樣的消息(如kill() ),可以獲得不同的響應。

  • 上課的時候。我說過。假設考試時要你簡答什麽是多態。你寫:“殺豬殺屁股,各有各的刀法”,我給你一個√。

【某些著作中,將show(Butcher) 這一使用方法稱為純多態

即以子類對象引用為實參而調用方法show(Butcher),其特點是方法體中。對於同一個kill()消息。因為消息接收者b指向的對象不同。而有不同的表現。】

多態性是一種不可獨立應用的特性,其實。它是向上造型和方法改寫/override共同作用後。在程序執行時表現出來的一些現象。換句話說,程序編碼時並不能直接“寫出”多態,僅僅有在程序執行時,說:“啊,我看到了多態”。

所以。從編程技巧或源碼角度看:
★多態 =向上造型+方法改寫(編程技巧)


★多態 =多態變量 + 動態綁定(系統機制)【p79】


技術分享


《編程導論(Java)·2.1.2 啊,我看到了多態》-什麽是多態(polymorphism)