OC是面向?qū)ο蟮恼Z言掺栅,面向?qū)ο蟪绦蛟O(shè)計(jì)中的類有三大特性:繼承姜胖,封裝誉帅,多態(tài) 。
封裝:
封裝就是對(duì)類中的一些字段右莱,方法進(jìn)行保護(hù)蚜锨,不被外界所訪問到。
OC中的類也有權(quán)限控制的功能慢蜓,但基本不用亚再,在實(shí)際開發(fā)中私有的只在.m文件中實(shí)現(xiàn)就好了,這意味只實(shí)現(xiàn)未聲明晨抡。
繼承:
繼承是類中的一個(gè)重要的特性氛悬,他的出現(xiàn)使得我們沒必要?jiǎng)e寫重復(fù)的代碼饲鄙,可重用性很高。
這個(gè)我感覺沒什么可以說的圆雁,和Java一樣忍级。
多態(tài):
簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針伪朽。
多態(tài)對(duì)于面向?qū)ο笏枷雭碚f轴咱,個(gè)人感覺是真的很重要,他對(duì)以后的編寫代碼的優(yōu)雅方式也是起到很重要的作用烈涮,其實(shí)現(xiàn)在很多設(shè)計(jì)模式中大部分都是用到了多態(tài)的特性朴肺,Java中的多態(tài)特性用起來很是方便的,但是C++中就很難用了坚洽,其實(shí)多態(tài)說白了就是:定義類型和實(shí)際類型戈稿,一般是基于接口的形式實(shí)現(xiàn)的,還是看代碼讶舰,這比較抽象鞍盗。
main.png
person有個(gè)feedAnimal方法,傳入的是Animal的對(duì)象跳昼。Animal有個(gè)eat方法般甲,cat和dog 是繼承于Animal的。三個(gè)都實(shí)例化鹅颊,person調(diào)用feedAnimal方法傳入相應(yīng)的對(duì)象敷存,打印出來的是各自的類名,這就是多態(tài)的一個(gè)表現(xiàn)堪伍。
多態(tài)的局限性
父類類型的對(duì)象不能直接調(diào)用子類對(duì)象特有的方法锚烦,如果必須要調(diào)用,則必須將父類對(duì)象強(qiáng)制轉(zhuǎn)換成子類對(duì)象帝雇。
EBF92BAC-D404-4F93-92E2-DE4E4398252B.png
在Cat類中寫了一個(gè)sleep方法涮俄;在main函數(shù)直接用Animal調(diào)用會(huì)報(bào)錯(cuò)
EBF92BAC-D404-4F93-92E2-DE4E4398252B.png
錯(cuò)誤提示為:No visible @interface for 'LeeAnimal' declares the selector 'sleep' 未定義該方法。