溫馨提示×

溫馨提示×

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

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

java中的多態(tài)怎么實現(xiàn)

發(fā)布時間:2020-06-29 17:32:37 來源:億速云 閱讀:375 作者:元一 欄目:編程語言

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è)資訊頻道,感謝您對億速云的支持。

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

免責(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)容。

AI