多型 動態型別和動態繫結

2021-07-09 05:45:31 字數 1384 閱讀 8767

多型:是的能夠開發以下程式:來自不同類的物件,可以定義共享相同名稱的方法。

動態型別:能夠使程式直到執行的時候才確定所屬的類。

動態繫結:能夠使程式直到執行的時候才能確定要對物件呼叫的實際方法。

objc系統總是攜帶有關「乙個物件屬於哪個類」這樣的資訊,因此,當向乙個物件傳送訊息的時候,物件系統總是能夠找到物件所屬的類,從而在該類或者其父類當中呼叫相應的方法,而不是去其他類當中。

多型的定義:使用不同的類共享相同方法名的能力成為多型。

思考

什麼是多型?多型能夠幹什麼?多型在objc當中是如何實現的?objc系統是什麼?

:多型是objc的一種特性(特有的能力),它能夠使objc中所有的類共享相同的方法名稱。 關於如何實現多型,在之後的章節會有說明。(一定是有一幫**搞了些不為人知的秘密。) objc系統是什麼······暫時未知。

id的定義、id用來做什麼、id的優勢體現在什麼地方。

id是一種資料型別,它是一種通用的物件型別。他可以用來儲存屬於任何類的物件。 當以這種方式在乙個變數中儲存不同型別的物件的時候,在程式執行期間這種資料型別的真正優勢就出現了。

我們之前提及過,向物件傳送訊息的時候。首先需要檢查並且確定物件所屬的類,然後看他所屬的類或者父類是否定義了相應的方法,然後呼叫相應的方法,或者報錯。 在objc當中,若用id型別類儲存物件,所有這些操作都會推遲到執行時來進行,而不是編譯的時候。因為在編譯期間,編譯器無從得知id型別的變數所儲存的物件型別。 以上,使得id型別(動態型別)能夠滿足他作為一種通用的資料型別所要達到的效果–用一種通用的型別能夠儲存所有型別的物件。

思考

想想tableview所用的**設計模式,tableview的**(delegate)可以是任何類的物件,所以在定義屬性的時候,就不能確定delegate到底是什麼型別,傳統的編譯時確定變數型別就不能夠滿足這種設計模式的需要(因為編譯時是需要確定變數型別的,放在**設計模式中也就是確定了他的**是哪個類)。因此我們需要一種通用的資料型別來表示這個屬性,id因此也就應運而生。由於id的通用性,編譯的時候並不需要也沒辦法去確定它的型別,一切都推遲到執行時來搞定。 由此可見,id型別滿足了objc一些設計模式上的一些需求,從而使得objc成為了一門動態的語言。

靜態型別:變數總是用於儲存特定型別的物件。

使用靜態型別的好處:1.編譯器能夠在編譯器就按通過檢查來確定應用於物件的方法是由該類定義的或者有該類繼承,否則他將會顯示警告訊息。 2.並且能夠在編譯期間而不是執行時指出錯誤,更早的指出錯誤有利於我們提高程式的準確行,避免了在執行時可能無法發現的一些錯誤。 3.有利於程式的可讀性。

多型 動態繫結和動態型別

多型 動態繫結和動態型別 bool iskindofclass class aclass 物件是不是aclass或者其子類的成員 bool ismemberofclass class aclass 物件是不是aclass成員 bool issubclassofclass class aclass 物...

動態繫結和多型

動態繫結是指 在執行期間 即非編譯期 判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。多型的存在有三個必要條件 1,要求繼承 2,要有重寫 3,父類引用指向子類物件 例 class animal public void enjoy class cat extends animal pub...

多型,動態繫結

呼叫方法時,只要方法重寫了,實際當中調哪個,要看實際中new哪個物件。color red 好處 可擴充套件性達到最好。color 當增加東西時,不需要改原來的結構,直接加上就可以了。color red 多型的存在必要條件 1 要有繼承,2 要有重寫,3 父類引用指向子類物件。color packag...