封裝
封裝最好理解了。封裝是面向對象的特徵之一,是對象和類概念的主要特性。
封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
繼承
面向對象編程 (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定義的對象發送消息)需要同名方法的實現擁有相同返回值類型和相同的參數類型;否則,運行時可能出現找不到對應方法的錯誤。
有一個例外,雖然同名竈方法和實例方法擁有相同的選取器,但是它們可以有不同的參數類型和返回值類型。