面向?qū)ο蟮奶卣?/h1>

面向?qū)ο蟮娜筇卣鳎?br> 1.封裝
2.繼承
3.多態(tài)

封裝

什么是封裝:
-隱藏內(nèi)部實現(xiàn)班利,穩(wěn)定外部接口
-可以看做是包裝

NSLog(@"%@",Hello world);

系統(tǒng)提供了控制臺輸出函數(shù),我們不知道怎么實現(xiàn)一忱,但是可以使用

Student *stu=[[Student alloc] init];
stu.age=-40

age為property 屬性,輸出結(jié)果為18

封裝的實現(xiàn)
-屬性 封裝了實例變量
-方法 封裝了具體的實現(xiàn)代碼
-類 封裝了屬性和方法

繼承

為什么使用繼承

子類可以繼承父類除了 私有的東西和main.m 之外的所有東西
創(chuàng)建一個項目


新建項目

創(chuàng)建一個父類

新建一個父類.png
在類文件中聲明類的屬性和方法.png

在此注意 NSString有*號桐磁,使用copy或者strong類型
其他的基本數(shù)據(jù)類型使用 assign

創(chuàng)建類的方法.png

此處注意士飒,在方法中調(diào)用屬性對象的時候查邢,要使用self來調(diào)用

接下來創(chuàng)建一個子類

創(chuàng)建一個繼承自NSObject的子類.png

在新建的類中寫屬性和子類方法(此類的父類NSObject并無這些屬性和方法)


創(chuàng)建屬性和方法.png

接下來對創(chuàng)建的方法進行實現(xiàn)


方法實現(xiàn).png

接下來,我們創(chuàng)建一個類酵幕,這個類繼承自我們剛才創(chuàng)建的類


新建一個子類.png

因為我們繼承的父類中已經(jīng)有了打招呼消費的方法扰藕,因此在子類中便可以不用在聲明

子類的接口文件.png

子類可以對父類中已有的方法進行調(diào)用重寫使用父類中的方法


對方法進行重寫.png

兩者都實現(xiàn)同樣的功能,使用繼承的方式可以減少代碼量芳撒,精簡代碼減少冗余邓深。


此圖是兩種方式創(chuàng)建的類對比.png

繼承的特點
-使用繼承可以實現(xiàn)代碼的復(fù)用減少代碼的冗余
-Objective-C 中的一個類可以繼承另一個類
-被繼承的類稱為父類或超類(基類)
-繼承的類稱為子類或派生類(孩子類)
-子類可以直接擁有父類中所有允許子類繼承的屬性和方法
-子類可以改變父類中已有的方法,執(zhí)行父類性之下的所有類都會有父類型所持有的全部方法

單一繼承性
Objective-C 不支持多重繼承笔刹,因為多重繼承會有成為“致命方塊”的問題芥备。

繼承的語法

@interface 類名:父類名

冒號后的標示符為要繼承的類
-一般情況下,我們繼承的NSObObject類
-可以獲取NSObject類中大量有用的特性
-Objective-C中只允許單一繼承

繼承中的實例變量
-子類可以添加自己的實例變量和方法

繼承中的方法調(diào)用
-調(diào)用子類的方法時舌菜,首先向子類詢問是否能夠調(diào)用該方法萌壳,容易子類有該方法,直接調(diào)用日月。
-如果子類沒有該方法袱瓮,則找父類的類的父類,往上找爱咬,知道找到為止尺借。
-如果沒有找到,程序報錯精拟。

super關(guān)鍵字
-在子類中需要調(diào)用父類的功能褐望,可以借用super關(guān)鍵字
-子類中使用super發(fā)送消息時,實際上是告訴子類調(diào)用父類的方法
-如果父類沒有定義方法串前,則繼續(xù)在繼承鏈上查找瘫里,直到找到為止
-如果查到NSObject為止還是無法吵到,程序會報錯
-重寫方法時會經(jīng)常用到super關(guān)鍵字來調(diào)用父類的方法

description
-子類可以重寫父類的方法荡碾,NSObject有一個方法為descrption
-該方法返回NSString,用于描述該對象
-當使用NSLog(@"%@",對象)時谨读,會默認調(diào)用該類的description方法
-如果沒有重寫該方法,會默認調(diào)用調(diào)用NSObject的該方法坛吁,返回形式<類型:地址>的數(shù)據(jù)
-子類中重寫該方法可以返回自定義對象的信息劳殖。

可以在剛才出創(chuàng)建的項目中試驗
在main.m文件中添加


mian.m

在類的方法實現(xiàn)文件中


添加對象重寫方法.png

在此可以看到對象描述的數(shù)據(jù)改變了

多態(tài)

概念
-對于不同對象響應(yīng)同一個方法產(chǎn)生不同的結(jié)果

id數(shù)據(jù)類型(動態(tài))
沒有 * 號
-動態(tài)數(shù)據(jù)類型
-可以指向任何類的對象(設(shè)置是nil),而不關(guān)心什么具體類型
-運行時檢查其具體類型
-可以對它發(fā)送任何(存在的)消息

靜態(tài)數(shù)據(jù)類型

類型 * 對象

總是存儲特定的數(shù)據(jù)類型
編譯器在編碼階段進行語法檢查-編譯前便會檢查語法

在此試驗id類型的具體使用
新建一個類拨脉,在類的接口文件中實現(xiàn)屬性和方法的聲明


新建類.png

在此寫一個Teacher類的輸出哆姻,就是方法的實現(xiàn)


類實現(xiàn)文件的代碼.png

再新建一個類,同樣定義屬性和方法


接口文件.png

寫類的實現(xiàn)文件代碼


實現(xiàn)文件.png

在main文件中出創(chuàng)建和使用對象
可以發(fā)現(xiàn)玫膀,我們使用id類型來創(chuàng)建一個項目,方便我們使用矛缨。
對于不同的對象Dog和Cat我們都是調(diào)用同一個方法animal eat。


最后在main.m文件中創(chuàng)建和使用.png

多態(tài)的好處
可以簡化編程接口
-允許在多個類中定義同一個消息接口
-可以定義一個通用的調(diào)用方法,以簡化調(diào)用
把不同的子類對象都當做父類來看
-可以屏蔽不同子類對象之間的差異箕昭,寫出通用得的代碼
-做出通用的編程灵妨,以適應(yīng)需求的不斷不斷變化

創(chuàng)建一個項目

新建一個類文件.png

在接口文件寫一個屬性


寫類文件的接口文件.png

在實現(xiàn)文件文件


實現(xiàn)文件.png

再新建一個類,這個類繼承自剛才的的類


新建一個類.png
在類的.png

在此用同樣方法創(chuàng)建一個貓類

最后在main函數(shù)文件中使用程序
可以看到最后的輸出中落竹,有一次我們調(diào)用父類方法泌霍,和子類的重寫的方法


main.m

在此加斷點調(diào)試,可以看到animal的屬性的具體變化


animal類型.png
Dog類型.png

只有屬于父子類型的時候才能使用這種賦值類型(is a 關(guān)系)


description方法
(用來重寫方法)
-子類可以重寫父類的方法述召,NSObject有一個方法為descrption
-該方法返回NSSting,用于描述該對象
-當使用NSLog(@"%@",對象)時朱转,會默認調(diào)用該對象的description方法
-如果我們不重寫此方法會默認調(diào)用NSObject的該方法,返回形式
<類名:地址>的數(shù)據(jù)
子類中重寫該方法可以返回自定義對象信息

里氏替換原則
-繼承必須確是保超類所擁有的性質(zhì)在子類中仍然成立积暖。
-當一個子類的實例應(yīng)該能夠替換任何超類的實例時肋拔,它們之間才具有is-a關(guān)系
-子類總是可以替換父類去做一些事情

++++

在新建一個類


Student接口文件
Student實現(xiàn)文件
在main.m文件中實現(xiàn)

開閉原則(OCP)
在面向?qū)ο笤O(shè)計中“可復(fù)用設(shè)計”的基石,是最重要的原則之一呀酸,其它設(shè)計原則都是實現(xiàn)開閉原則的一種手段。
勃蘭特·梅耶 的《面向?qū)ο筌浖?gòu)造(Object Oriented Software Construction)》中提出開閉原則琼梆,原文:“Software entities should be open for extension,but closed for modification”性誉。翻譯過來就是:“軟件實體應(yīng)當對擴展開放,對修改關(guān)閉”茎杂〈砝溃【譯】軟件系統(tǒng)中包含的各種組件,例如[模塊](Modules)煌往、[類](Classes)以及功能(Functions)等等倾哺,應(yīng)該在不修改現(xiàn)有代碼的基礎(chǔ)上,引入新功能刽脖。
開閉原則中“開”
是指對組件功能的擴展是開放的羞海,是允許對其進行功能擴展的;
開閉原則中“閉”
是指對原有代碼的修改是封閉的曲管,即不應(yīng)該修改原有的代碼却邓。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市院水,隨后出現(xiàn)的幾起案子腊徙,更是在濱河造成了極大的恐慌,老刑警劉巖檬某,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撬腾,死亡現(xiàn)場離奇詭異,居然都是意外死亡恢恼,警方通過查閱死者的電腦和手機民傻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饰潜,你說我怎么就攤上這事初坠。” “怎么了彭雾?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵碟刺,是天一觀的道長。 經(jīng)常有香客問我薯酝,道長半沽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任吴菠,我火速辦了婚禮者填,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘做葵。我一直安慰自己占哟,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布酿矢。 她就那樣靜靜地躺著榨乎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘫筐。 梳的紋絲不亂的頭發(fā)上蜜暑,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音策肝,去河邊找鬼肛捍。 笑死,一個胖子當著我的面吹牛之众,可吹牛的內(nèi)容都是我干的拙毫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼棺禾,長吁一口氣:“原來是場噩夢啊……” “哼恬偷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帘睦,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袍患,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后竣付,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诡延,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年古胆,在試婚紗的時候發(fā)現(xiàn)自己被綠了肆良。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筛璧。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惹恃,靈堂內(nèi)的尸體忽然破棺而出夭谤,到底是詐尸還是另有隱情,我是刑警寧澤巫糙,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布朗儒,位于F島的核電站,受9級特大地震影響参淹,放射性物質(zhì)發(fā)生泄漏醉锄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一浙值、第九天 我趴在偏房一處隱蔽的房頂上張望恳不。 院中可真熱鬧,春花似錦开呐、人聲如沸烟勋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卵惦。三九已至,卻和暖如春家妆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冕茅。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工伤极, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姨伤。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓哨坪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乍楚。 傳聞我的和親對象是個殘疾皇子当编,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容