您好,登錄后才能下訂單哦!
java中的多態(tài)怎么實現(xiàn)?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
多態(tài)(Polymorphism)按字面的意思就是"多種狀態(tài)"。在面向?qū)ο笳Z言中,接口的多種不同的實現(xiàn)方式即為多態(tài)。引用Charlie Calverts對多態(tài)的描述--多態(tài)性是允許你將父對象設(shè)置成為一個或更多的他的子對象相等的技術(shù),賦值之后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運作(摘自"Delphi4 編程技術(shù)內(nèi)幕")。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態(tài)性在Object Pascal和C++中都是通過虛函數(shù)實現(xiàn)的。多態(tài),是面向?qū)ο蟮某绦蛟O(shè)計語言最核心的特征。多態(tài),意味著一個對象有著多重特征,可以在特定的情況下,表現(xiàn)不同的狀態(tài),從而對應(yīng)著不同的屬性和方法。
Parent pa = new Child_A();
pa.simpleCall()則顯然是調(diào)用Child_A的方法;
Parent pa = new Child_B();
pa.simpleCall()則是在調(diào)用Child_B的方法。所以,我們對于抽象的父類或者接口給出了我們的具體實現(xiàn)后,pa 可以完全不用管實現(xiàn)的細(xì)節(jié),只訪問我們定義的方法,就可以了。事實上,這就是多態(tài)所起的作用,可以實現(xiàn)控制反轉(zhuǎn)。這在大量的J2EE輕量級框架中被用到,比如Spring的依賴注入機制。
Java中實現(xiàn)多態(tài)的方式:
1、接口實現(xiàn);
2、繼承父類進(jìn)行方法重寫;
3、同一個類中進(jìn)行方法重載。
多態(tài)存在的必要條件:
1、要有繼承;
2、要有重寫;
3、父類引用指向子類對象。
多態(tài)的好處:
1、可替換性(substitutability)。
多態(tài)對已存在代碼具有可替換性。例如,多態(tài)對圓Circle類工作,對其他任何圓形幾何體,如圓環(huán),也同樣工作。
2、可擴充性(extensibility)。
多態(tài)對代碼具有可擴充性。增加新的子類不影響已存在類的多態(tài)性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態(tài)功能。例如,在實現(xiàn)了圓錐、半圓錐以及半球體的多態(tài)基礎(chǔ)上,很容易增添球體類的多態(tài)性。
3、接口性(interface-ability)。
多態(tài)是超類通過方法簽名,向子類提供了一個共同接口,由子類來完善或者覆蓋它而實現(xiàn)的。如圖8.3 所示。圖中超類Shape規(guī)定了兩個實現(xiàn)多態(tài)的接口方法,computeArea()以及computeVolume()。子類,如Circle和Sphere為了實現(xiàn)多態(tài),完善或者覆蓋這兩個接口方法。
4、靈活性(flexibility)。
它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率。
5、簡化性(simplicity)。
多態(tài)簡化對應(yīng)用軟件的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。
多態(tài)實例:
(1)相關(guān)類
class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A obj)...{ return ("A and A"); } } class B extends A...{ public String show(B obj)...{ return ("B and B"); } public String show(A obj)...{ return ("B and A"); } } class C extends B...{} class D extends B...{}
(2)問題:以下輸出結(jié)果是什么?
A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a1.show(b)); ① System.out.println(a1.show(c)); ② System.out.println(a1.show(d)); ③ System.out.println(a2.show(b)); ④ System.out.println(a2.show(c)); ⑤ System.out.println(a2.show(d)); ⑥ System.out.println(b.show(b)); ⑦ System.out.println(b.show(c)); ⑧ System.out.println(b.show(d)); ⑨
(3)答案
① A and A ② A and A ③ A and D ④ B and A ⑤ B and A ⑥ A and D ⑦ B and B ⑧ B and B ⑨ A and D
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。