第三章—多態

在這裏插入圖片描述
面向對象最核心的機制:動態綁定也叫多態

Main方法在內存裏分配內存了這個是執行期間

Cat c = new Cat (“catname”, “blue”);
在這裏插入圖片描述

Lady l1 = new Lady (“l1”,c);
Lady裏有自己的成員變量name,它的名字通過調用構造方法 name = “l1”
還有一個引用類型的成員變量是一個Animal 對象,名字叫Animal:pet
接下來調用構造方法時是把c傳遞給它(把c傳遞給了pet),當new 出這個Lady時pet指向的和c是相同的對象
在這裏插入圖片描述

但是作爲Animal角度想它是把c的對象當成一個普通的Animal對象,當成一隻普通的Animal時,應在指向內部
在這裏插入圖片描述

方法存放在code seg區中一行一行存在
當訪問方法時相當於找到對象,然後看看對象中的方法在哪存着,找到那個方法在執行
當l1調用方法時是根據實際當中的對象來確定
如果通過引用類型來確定那麼調用的是Animal裏的enjoy方法
在這裏插入圖片描述

但是現在是根據實際當中來確定(是整個c的對象) c:xx引用指向cat.enjoy
在這裏插入圖片描述

動態綁定這種機制指的是實際當中new 的什麼類型就調用誰的方法(enjoy方法)

這裏是引用
對象內部
實際當中找方法時在對象內部有一個enjoy方法的指針,指向該方法,只不過在new對象時指針隨之改變,new什麼對象就指向那個對象的重寫的方法,這就是動態綁定
在這裏插入圖片描述

爲什麼叫動態呢?

只有在動起來的時候也就是運行期間new出這個對象來才能確定我這個方法調的到底是哪個方法,實際當中的地址纔會綁定到相應的方法之中的地址上面,所以叫動態綁定

動態綁定把程序的擴展性發揮到了極致

Lady的類原來如果要添加新的東西需要修改裏面的方法,使用動態綁定不需要了(直接寫新的類也在main裏new出該類的對象就可以了)
在這裏插入圖片描述

多態的存在有三個必要條件:

  1. 要有繼承
  2. 要有重寫
  3. 父類引用指向子類對象

這三個條件一旦滿足 ,當調用父類裏被重寫的方法時
實際當做new的是那個子類對象就調用子類對象的那個方法

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