java基礎-多態是什麼?

1.1 什麼是多態?

多態是繼數據抽象和繼承以後的第三種基本特徵。java

定義:多態(Polymorphism)按字面的意思就是「多種狀態」。在面嚮對象語言中,接口的多種不一樣的實現方式即爲多態。引用Charlie Calverts對多態的描述——多態性是容許你將父對象設置成爲一個或更多的他的子對象相等的技術,賦值以後,父對象就能夠根據當前賦值給它的子對象的特性以不一樣的方式運做(摘自「Delphi4 編程技術內幕」)。簡單的說,就是一句話:容許將子類類型的指針賦值給父類類型的指針。程序員

面向對象特性:「封裝」經過合併特徵和行爲來建立新的數據類型。而「多態」的做用則是消除類型之間的耦合關係。編程

「繼承」容許將對象視爲它本身自己的類型或其基本類型來加以處理,它容許將多種類型(從同一基類導出 )視爲同一類型來處理。spa

而「多態」方法調用容許一種類型表現出與其餘類似類型之間的區別,只要他們都是從同一類型導出的。設計

 

△△△ 我如今這麼認爲,多態和繼承說的是一個事情,都是說的是類與類之間的關係。指針

個人理解是 繼承表現的是具備相同成員的基類和導出類的關係。code

而多態表示的是在調用相同類型的時候,表現出來的調用哪一個方法的問題。htm

1.2  多態是如何實現的呢?

答:經過動態綁定。對象

什麼是綁定? 抽象來說,將一個方法調用同一個方法主體關聯起來被稱做綁定。繼承

若在程序執行前進行綁定,則稱爲前期綁定。

而當咱們的方法須要一個基類類型的時候,卻傳入了一個子類對象,而編譯器能在運行時

動態的判斷出子類的類型,這種機制就是動態綁定,也叫運行時綁定或者後期綁定。

想一下就能知道,這是經過在對象中加入了「類型信息」實現的。

△△△ 注意:java中除了static 和 final方法以外,其餘的方法都是動態綁定的。

當咱們爲一個方法定義爲final的時候,除了能夠防止其餘人覆蓋該方法,還有就是告訴編譯器,這個方法不須要動態綁定,編譯器就能夠爲final方法的調用生成更爲有效的方法。

咱們知道了全部方法都是經過動態綁定來實現多態這個事實以後,咱們就能夠大膽編寫只和基類打交道的程序代碼了。

1.3  多態實現可擴展

package polymorphism.music;

public class Music {
	public static void tune(Instrument i) {
		// ...
		i.play(Note.MIDDLE_C);
	}

	public static void main(String[] args) {
		Wind flute = new Wind();
		tune(flute); // Upcasting
	}
}

 

好比在這個類當中,咱們的方法tune()只和基類Instrument打交道,當咱們須要新的樂器的時候,不須要改變原來的tune()。只須要建立新樂器類型就行了。在一個設計良好的OOP程序中,大多數或者全部的方法都會遵循tune()模型,並且只與基類接口通訊,這就實現了可擴展性。

 

也就是說,咱們所修改的代碼,不會對程序中其餘不該收到影響的部分產生破壞。

換句話說,多態是讓程序員」將改變的事物與未改變的事物分離「的重要技術。

 

 

著做權歸@kfh全部轉載請註明出處

相關文章
相關標籤/搜索