iOS概念入門學習-OC-類的繼承和派生

概要:本文介紹了類的繼承和派生的基本概念和其應用(多態),作爲面向對象三大特性之一,理解繼承是學好OC的必經之路!

一、類的繼承和派生基本概念

引子:請想想這樣一種場景。小明家的泰迪狗“旺財”按照面向對象的觀點來看屬於哪類呢?“旺財”屬於泰迪狗類,而泰迪狗類又屬於狗類。泰迪狗類擁有狗類的一切屬性,而泰迪狗又擁有特有的毛髮材質和身材體型。這樣就構成了“狗->泰迪狗”這樣一種繼承派生關係。下面來看具體的定義。

1.概念

繼承是指一個新類擁有全部被繼承類的屬性和方法,通過繼承產生新類的過程也稱作派生。
繼承機制使得新類不僅有自己特有的屬性和方法,而且有被繼承類的全部屬性和方法。

例如:
這裏寫圖片描述

2.基類和派生類之間的關係

這裏寫圖片描述
說明:
(1)基類的私有屬性能被繼承,不能被使用。
(2)OC中的繼承是單繼承:也就是說一個類只能一個父類,不能繼承多個父類

3.方法的重寫

從父類繼承的方法,可能這個方法並不適合子類,可以在子類中重寫父類的方法。 重寫之後,父類的對象調用父類的方法;子類的對象,調用子類的方法,不會引起衝突。 從父類繼承的方法,不適用於子類時,可以直接聲明父類的同名方法,並定義。 不用考慮父類中,方法已存在的問題。 重寫後,子類可以通過super調用父類的方法。

4.繼承的注意事項

(1)子類不能定義和父類同名的變量,但是可以繼承父類的變量
(2)OC類支持單一繼承,不支持多繼承 ,即“兒子只能有一個爸爸”
(3)OC類支持多層繼承 ,即“兒子有爸爸,爸爸還有爺爺”

注意:繼承體系中方法調用順序:
(1)在自己類中找
(2)如果沒有,去父類中找
(3)如果父類中沒有,就去父類的父類中
(4)如果父類的父類也沒有,就還往上找,直到找到基類(NSObject)
(5)如果NSObject都沒有就報錯了

5.實例變量的修飾符

記得在面向對象的時候我們就學習過幾個修飾符及其作用,public、private、protected。現如今接觸了繼承,纔算是對於實例變量的作用域有了一個新的認識。首先,一張圖說明幾個實例變量的作用域!
這裏寫圖片描述

詳細說明如下:
(1)@public (公開的)在有對象的前提下,任何地方都可以直接訪問。
(2)@protected (受保護的)只能在當前類和子類的對象方法中訪問 (默認訪問權限)
(3)@private (私有的)只能在當前類的對象方法中才能直接訪問
(4)@package (框架級別的)作用域介於私有和公開之間,只要處於同一個框架中就可以直接通 過變量名訪問

6.私有變量和私有方法

(1)私有變量

私有變量:只能在當前類使用的變量。既不能被子類繼承,也不能被子類訪問。即在.m文件中聲明變量

(2)私有方法

在.h中沒有聲明,在.m中實現,此時該方法被稱爲私有方法。私有方法不能被子類繼承,子類中也不可用。 

二、多態

1.概念

多態就是某一類事物的多種形態

程序中的多態:

不同的對象以自己的方式響應相同名稱方法的能力稱爲多態;或者多態是同一個行爲具有多個不同表現形式或形態的能力。

2.多態的條件

多態的條件:父類的聲明變量指向子類對象。 
有繼承關係、有方法重寫 

3.多態的優點

多態的主要好處就是簡化了編程接口。它容許在類和類之間重用一些習慣性的命名,而不用爲每一個新加的函數命名一個新名字。這樣,編程接口就是一些抽象的行爲的集合,從而和實現接口的類的區分開來。
多態也使得代碼可以分散在不同的對象中而不用試圖在一個函數中考慮到所有可能的對象。 這樣使得您的代碼擴展性和複用性更好一些。當一個新的情景出現時,您無須對現有的代碼進行改動,而只需要增加一個新的類和新的同名方法。

4.多態的實現

例如:Animal是父類,子類有Cat和Dog,子類分別重寫了父類中的eat方法。實例化對象的時候可以用下面的方法:
這裏寫圖片描述

5.多態的原理

多態的原理基於OC的動態綁定特性,動態類型能使程序直到執行時才確定對象所屬類型,動態類型綁定能使程序直到執行時才確定要對對象調用的實際方法

注意:
(1)如果存在多態,父類是可以訪問子類特有的方法
(2)如果不存在多態,父類是不可以訪問子類特有的方法的

6.多態的實例

這裏寫圖片描述

總結:學到這裏忽然感覺到了原汁原味的面向對象編程是怎樣的,藉助於強大的OC動態綁定特定結合多態,令編程更靈活更方便。

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