一,多態的含義
在面向對象的思想中,抽象,封裝,繼承,多態這幾個詞已經是我們經常見到的了。首先,多態是在繼承的基礎上形成的,多態是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現出不同的形式。多態成立的另一個條件是在創建子類時候必須使用父類new子類的方式。如果一個語言只是支持類而不是支持多態的,那么該語言就不能說是面向對象而僅僅是基於對象。
二,多態的具體實現
如果對多態的概念理解不清楚,可以舉一幾個例子幫助理解
第一個例子:該例子出自百度百科,鏈接地址
public interface Parent//父類接口 { public void simpleCall(); } public class Child_A implements Parent { public void simpleCall(); { //具體的實現細節; } } public class Child_B implements Parent { public void simpleCall(); { //具體的實現細節; } }
Parent pa = new Child_A(); pa.simpleCall();
顯然是調用Child_A的方法;而
Parent pa = new Child_B();
pa.simpleCall();
則是在調用Child_B的方法。
所以,我們對於抽象的父類或者接口給出了我們的具體實現后,pa 可以完全不用管實現的細節,只訪問我們定義的方法,就可以了。事實上,這就是多態所起的作用。
第二個例子感覺也很容易理解,該例子出自百度知道,鏈接地址
雞是所有其它雞的基類, 定義了一個方法shape(), 此方法能指明雞的形態. 所有的子類[火雞,山雞,田雞等],都有這個shape方法, 表明自己的形態,如果用下面的方法定義我需要具體的雞,
[基類 引用 = 實現類的對象]
for example:
雞 a = new 火雞();
雞 a = new 田雞();
雞 a = new 山雞();
雞 a = new 母雞();
當我使用的時候, 我采用 a 這個引用,
a.shape(), 就會得到雞的形態.
如果我定義的是
雞 a = new 火雞();
那么a.shape得到的是火雞的形態, 而不需要用具體的
火雞 a = new 火雞(); 再通過a.shape得到火雞的形態