怎麼理解java的多態?

關於多態(動態綁定)見下面具體分析:

首先說明以下知識點:

動態綁定(多態):在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。

父類引用指向子類對象,但是父類引用所能看到的只屬於父類那部分屬性和方法。此過程還存在指針指向變化情況(因爲重寫),從指向原來自己方法變化到指向new出來對象的方法。

以簡單程序舉例:

classA{intm;publicintgetM{returnm;}publicvoidsetM(intm){this.m=m;}classBextendsA{intm;publicintgetM{returnm+100;}}publicclassE{publicstaticvoidmain(String[]args){Bb=newB;b.m=20;System.out.println(b.getM);// 120Aa=b;a.m=-100;System.out.println(a.getM);// -100}}

下面針對此題畫內存分析圖分析並附加代碼解釋:

小編是一個有着5年工作經驗的java程序員,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裏有很多學習java的小夥伴,我創立了一個2000人學習扣羣,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!

b.m = 20; 修改的是B類的屬性,如圖。

b.getM; 是取到B對象自己的方法,輸出20+100

A a = b; 此時a指向B對象,但是所能看到的只是父類那部分屬性和方法。此過程還發生上 面知識點2中的指針指向變化,如圖綠色變變化指向。

a.m = -100; 因爲只能看到父類那部分屬性和方法,所以修改的是A對象的屬性,如圖

a.getM; 因爲此時指向方法的指針發生給變,所以指向的還是B對象的方法(自然用B的屬性),輸出還是20+100

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