概要:本文介紹了類的繼承和派生的基本概念和其應用(多型),作為物件導向三大特性之一,理解繼承是學好oc的必經之路!
引子:請想想這樣一種場景。小明家的泰迪狗「旺財」按照物件導向的觀點來看屬於哪類呢?「旺財」屬於泰迪狗類,而泰迪狗類又屬於狗類。泰迪狗類擁有狗類的一切屬性,而泰迪狗又擁有特有的毛髮材質和身材體型。這樣就構成了「狗->泰迪狗」這樣一種繼承派生關係。下面來看具體的定義。
繼承是指乙個新類擁有全部被繼承類的屬性和方法,通過繼承產生新類的過程也稱作派生。
繼承機制使得新類不僅有自己特有的屬性和方法,而且有被繼承類的全部屬性和方法。
例如:
說明:
(1)基類的私有屬效能被繼承,不能被使用。
(2)oc中的繼承是單繼承:也就是說乙個類只能乙個父類,不能繼承多個父類
從父類繼承的方法,可能這個方法並不適合子類,可以在子類中重寫父類的方法。 重寫之後,父類的物件呼叫父類的方法;子類的物件,呼叫子類的方法,不會引起衝突。 從父類繼承的方法,不適用於子類時,可以直接宣告父類的同名方法,並定義。 不用考慮父類中,方法已存在的問題。 重寫後,子類可以通過super呼叫父類的方法。
(1)子類不能定義和父類同名的變數,但是可以繼承父類的變數
(2)oc類支援單一繼承,不支援多繼承 ,即「兒子只能有乙個爸爸」
(3)oc類支援多層繼承 ,即「兒子有爸爸,爸爸還有爺爺」
注意:繼承體系中方法呼叫順序:
(1)在自己類中找
(2)如果沒有,去父類中找
(3)如果父類中沒有,就去父類的父類中
(4)如果父類的父類也沒有,就還往上找,直到找到基類(nsobject)
(5)如果nsobject都沒有就報錯了
記得在物件導向的時候我們就學習過幾個修飾符及其作用,public、private、protected。現如今接觸了繼承,才算是對於例項變數的作用域有了乙個新的認識。首先,一張圖說明幾個例項變數的作用域!
詳細說明如下:
(1)@public (公開的)在有物件的前提下,任何地方都可以直接訪問。
(2)@protected (受保護的)只能在當前類和子類的物件方法中訪問 (預設訪問許可權)
(3)@private (私有的)只能在當前類的物件方法中才能直接訪問
(4)@package (框架級別的)作用域介於私有和公開之間,只要處於同乙個框架中就可以直接通 過變數名訪問
(1)私有變數
私有變數:只能在當前類使用的變數。既不能被子類繼承,也不能被子類訪問。即在.m檔案中宣告變數
(2)私有方法在.h中沒有宣告,在.m中實現,此時該方法被稱為私有方法。私有方法不能被子類繼承,子類中也不可用。
多型就是某一類事物的多種形態
程式中的多型:
不同的物件以自己的方式響應相同名稱方法的能力稱為多型;或者多型是同乙個行為具有多個不同表現形式或形態的能力。
多型的條件:父類的宣告變數指向子類物件。
有繼承關係、有方法重寫
多型的主要好處就是簡化了程式設計介面。它容許在類和類之間重用一些習慣性的命名,而不用為每乙個新加的函式命名乙個新名字。這樣,程式設計介面就是一些抽象的行為的集合,從而和實現介面的類的區分開來。
多型也使得**可以分散在不同的物件中而不用試圖在乙個函式中考慮到所有可能的物件。 這樣使得您的**擴充套件性和復用性更好一些。當乙個新的情景出現時,您無須對現有的**進行改動,而只需要增加乙個新的類和新的同名方法。
例如:animal是父類,子類有cat和dog,子類分別重寫了父類中的eat方法。例項化物件的時候可以用下面的方法:
多型的原理基於oc的動態繫結特性,動態型別能使程式直到執行時才確定物件所屬型別,動態型別繫結能使程式直到執行時才確定要對物件呼叫的實際方法
注意:
(1)如果存在多型,父類是可以訪問子類特有的方法
(2)如果不存在多型,父類是不可以訪問子類特有的方法的
總結:學到這裡忽然感覺到了原汁原味的物件導向程式設計是怎樣的,借助於強大的oc動態繫結特定結合多型,令程式設計更靈活更方便。
OC 中類的繼承
繼承的思想 繼承 當多個類出現部分相同的例項變數和方法時,就考慮用繼承.繼承的使用 將多個類中相同的部分的例項變數的方法提出來,寫成乙個公共的父類.繼承 子類繼承父類會將裡面所有除了宣告為 private的例項變數,以及私有方法之外,其餘內容都會被繼承.所以如果子類中有和父類同樣的內容,可以全部刪除...
iOS概念入門學習 OC property關鍵字
概要 本文循序漸進地介紹了 property關鍵字的使用,以及為什麼要這樣使用,也許了解了過去的用法,才更能體會如今用法的方便把!我在前文說過,類和c語言中的結構體很像,也有一些變數用來形容事物的屬性 成員變數 既然有屬性就需要進行初始化,下面就來介紹傳統初始化的方式 首先讓我們來了解一下傳統get...
OC學習筆記 OC中的類
1.objc跟c的區別與聯絡 首先 objc是乙個物件導向的語言 封裝 繼承 多型 objc相當於c的乙個超集 即objc允許使用任何c語言 但增加了許多c沒有的特點 bigger easier 2.objc中的類與物件 類由介面 xx.h inte ce 和實現 xx.m implementati...