OC是面向?qū)ο蟮恼Z言,面向?qū)ο蟪绦蛟O(shè)計中的類有三大特性:繼承,封裝,多態(tài) 。
封裝:
封裝就是對類中的一些字段,方法進(jìn)行保護(hù),不被外界所訪問到。
OC中的類也有權(quán)限控制的功能,但基本不用,在實(shí)際開發(fā)中私有的只在.m文件中實(shí)現(xiàn)就好了,這意味只實(shí)現(xiàn)未聲明。
繼承:
繼承是類中的一個重要的特性,他的出現(xiàn)使得我們沒必要別寫重復(fù)的代碼,可重用性很高。
這個我感覺沒什么可以說的,和Java一樣。
多態(tài):
簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。
多態(tài)對于面向?qū)ο笏枷雭碚f,個人感覺是真的很重要,他對以后的編寫代碼的優(yōu)雅方式也是起到很重要的作用,其實(shí)現(xiàn)在很多設(shè)計模式中大部分都是用到了多態(tài)的特性,Java中的多態(tài)特性用起來很是方便的,但是C++中就很難用了,其實(shí)多態(tài)說白了就是:定義類型和實(shí)際類型,一般是基于接口的形式實(shí)現(xiàn)的,還是看代碼,這比較抽象。

main.png
person有個feedAnimal方法,傳入的是Animal的對象。Animal有個eat方法,cat和dog 是繼承于Animal的。三個都實(shí)例化,person調(diào)用feedAnimal方法傳入相應(yīng)的對象,打印出來的是各自的類名,這就是多態(tài)的一個表現(xiàn)。
多態(tài)的局限性
父類類型的對象不能直接調(diào)用子類對象特有的方法,如果必須要調(diào)用,則必須將父類對象強(qiáng)制轉(zhuǎn)換成子類對象。

EBF92BAC-D404-4F93-92E2-DE4E4398252B.png
在Cat類中寫了一個sleep方法;在main函數(shù)直接用Animal調(diào)用會報錯

EBF92BAC-D404-4F93-92E2-DE4E4398252B.png
錯誤提示為:No visible @interface for 'LeeAnimal' declares the selector 'sleep' 未定義該方法。