Objective-C中的封裝、繼承、多態、分類

封裝

封裝最好理解了。封裝是面向對象的特徵之一,是對象和類概念的主要特性。
封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。 

繼承

面向對象編程 (OOP) 語言的一個主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴展。 繼承現有類 + 擴展

通過繼承創建的新類稱爲“子類”或“派生類”。 

被繼承的類稱爲“基類”、“父類”或“超類”。 

繼承的過程,就是從一般到特殊的過程。 

要實現繼承,可以通過“繼承”(Inheritance)和“組合”(Composition)來實現。 

在某些 OOP 語言中,一個子類可以繼承多個基類。但是一般情況下,一個子類只能有一個基類,要實現多重繼承,可以通過多級繼承來實現。 


繼承概念的實現方式有三類:實現繼承、接口繼承和可視繼承。 

Ø  實現繼承是指使用基類的屬性和方法而無需額外編碼的能力; 
Ø  接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力; 
Ø  可視繼承是指子窗體(類)使用基窗體(類)的外觀和實現代碼的能力。 



在考慮使用繼承時,有一點需要注意,那就是兩個類之間的關係應該是“屬於”關係。例如,Employee 是一個人,Manager 也是一個人,因此這兩個類都可以繼承 Person 類。但是 Leg 類卻不能繼承 Person 類,因爲腿並不是一個人。 

抽象類僅定義將由子類創建的一般屬性和方法,創建抽象類時,請使用關鍵字 Interface 而不是 Class。 

多態

多態性(polymorphisn)是允許你將父對象設置成爲和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針,不同對象以自己的方式響應相同的消息的能力叫做多態。
在Objective-C中如何實現多態



 在Objective-C中是通過一個叫做selector的選取器實現的。在Objective-C中,selector有兩個意思, 當用在給對象的源碼消息時,用來指方法的名字。它也指那個在源碼編譯後代替方法名的唯一的標識符。 編譯後的選擇器的類型是SEL有同樣名字的方法、也有同樣的選擇器。你可以使用選擇器來調用一個對象的方法。

選取器有以下特點:

  所有同名的方法擁有同樣的選取器

  所有的選取器都是不一樣的

 (1) SEL和@selector

      選擇器的類型是 SEL。@selector指示符用來引用選擇器,返回類型是SEL。

      例如:

     SEL responseSEL;      

            responseSEL = @selector(loadDataForTableView:);     

     可以通過字符串來得到選取器,例如:

           responseSEL = NSSelectorFromString(@"loadDataForTableView:");

     也可以通過反向轉換,得到方法名,例如:

           NSString  *methodName = NSStringFromSelector(responseSEL);


 (2) 方法和選取器

     選取器確定的是方法名,而不是方法實現。這是多態性和動態綁定的基礎,它使得向不同類對象發送相同的消息成爲現實;否則,發送     消息和標準C中調用方法就沒有區別,也就不可能支持多態性和動態綁定。

     另外,同一個類的同名類方法和實例方法擁有相同的選取器。

 (3) 方法返回值和@參數類型

     消息機制通過選取器找到方法的返回值類型和參數類型,因此,動態綁定(例:向id定義的對象發送消息)需要同名方法的實現擁有相同返回值類型和相同的參數類型;否則,運行時可能出現找不到對應方法的錯誤。

     有一個例外,雖然同名竈方法和實例方法擁有相同的選取器,但是它們可以有不同的參數類型和返回值類型。
發佈了5 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章