Java面向對象——多態

面向對象三大特徵:

繼承、封裝、多態

多態(polymorphism)

多態性是OOP中的一個重要特性,主要是用來實現動態聯編的,換句話說,就是程序的最終狀態只有在執行過程中才被決定而非在編譯期間就決定了。這對於大型系統來說能提高系統的靈活性和擴展性。

多態可以讓我們不用關心某個對象到底是什麼具體類型,就可以使用該對象的某些方法,從而實現更加靈活的編程,提高系統的可擴展性。

爲什麼需要多態?

多態性是指允許不同類的對象對同一消息作出不同的響應。

java中如何實現多態?使用多態的好處?

引用變量的兩種類型:

編譯時類型(模糊一點,一般是一個父類)

由聲明時的類型決定。

運行時類型(運行時,具體是哪個子類就是哪個子類)

由實際對應的對象類型決定。通過動態綁定調用該對象的方法。動態綁定會使我們的程序編寫更加靈活,但是會減慢程序運行速度。這也是JAVA比C++/C慢的主要原因之一。

小編相信這裏有很多學習java的朋友,小編整理了一份java方面的學習資料,想要獲取的可以加我的java學習Q羣的喲,92820,4055。歡迎愛學習Java的你們。

多態:如果編譯時類型和運行時類型不一致,就會造成多態。

方法綁定(method binding)

執行調用方法時,系統根據相關信息,能夠執行內存地址中代表該方法的代碼。分爲靜態綁定和動態綁定。

靜態綁定:

在編譯期完成,可以提高代碼執行速度。

動態綁定:

通過對象調用的方法,採用動態綁定機制。這雖然讓我們編程靈活,但是降低了代碼的執行速度。這也是JAVA比C/C++速度慢的主要因素之一。JAVA中除了final類、final方、static方法,所有方法都是JVM在運行期才進行動態綁定的。

應該針對成員變量、static方法等做一個專門的動態綁定的課程:

多態的使用要點

1.多態是方法的多態,屬性沒有多態性。

2.編寫程序時,如果想調用運行時類型的方法,只能進行類型轉換。不然通不過編譯器的檢查。但是如果兩個沒有關聯的類進行強制轉換,會報:ClassCastException。 比如:本來是狗,我把它轉成貓。就會報這個異常。

3.多態的存在要有3個必要條件:要有繼承,要有方法重寫,父類引用指向子類對象

對象的轉型(casting)

爲什麼需要強制轉換類型?

引用變量只能調用它編譯類型的方法,不能調用它運行類型的方法。這時,我們就需要進行類型的強制轉換!

一個父類的引用類型變量可以“指向”其子類的對象。

一個父類的引用不可以訪問其子類對象新增加的成員(屬性和方法)。

可以使用 引用 變量 instanceof 類名 來判斷該引用型變量所“指向”的對象是否屬於該類或該類的子類。

子類的對象可以當作基類的對象來使用稱作向上轉型(upcasting),反之稱爲向下轉型(downcasting

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章