面向?qū)ο蟮娜筇匦?/h1>

oc中面向?qū)ο笥腥筇匦韵趾幔瑸榉庋b漓拾,繼承,多態(tài)戒祠。 ? 封裝也是成員變量的封裝(保護成員變量不能被外界隨便賦值晦攒。)

1: 封裝

1>:set 方法:給外界提供一個方法給外界設(shè)置成員變量的值。

? ? ? ? ? ? ? ? ? 方法名必須以set 開頭得哆。

? ? ? ? ? ? ? ? ? set 后面跟上成員變量名,且成員變量名首字母必須大寫哟旗。

? ? ? ? ? ? ? ? ? set 方法返回值類型必為void贩据。

? ? ? ? ? ? ? ? ? 一定要接收一個參數(shù),且參數(shù)類型跟成員變量類型一致闸餐。

? ? ? ? ? ? ? ? ?形參的名稱不能與成員變量名一樣饱亮。

在 set 方法實現(xiàn)中可以對參數(shù)進行過濾。成員便令不能用@public 時舍沙,成員變量可被外面的指針變量任意賦值近上。

set 方法可以監(jiān)聽成員變量的改變。

2>: ?get 方法: ?返回對象內(nèi)部的成員的變量

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?肯定有返回值拂铡,且返回值類型與成員變量類型一致壹无。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不需要有形參。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?方法名就是成員變量名感帅。

封裝有set 方法來設(shè)置成員變量斗锭,用 get 方法來訪問成員變量。把對象的成員變量隱藏在里面失球,不顯示細節(jié)岖是。保證數(shù)據(jù)的安全性。

只讀: ?只允許外界訪問對象的某個屬性实苞,不允許外界修改這個成員變量的值豺撑。這時可以只提供get 方法不提供set 方法。

成員變量的命名黔牵,必須要以下劃線開頭聪轿,這樣可以跟局部變量區(qū)分開來,還跟get 方法區(qū)分開猾浦。帶下劃線的一般都是成員變量屹电。

oc是弱語法阶剑,oc中的方法調(diào)用時動態(tài)檢測的,運行時的過程中才會檢測對象有沒有實現(xiàn)相應(yīng)的方法危号。

例如:

@interface ?Person ?: NSObject?

?@end?

@implementation ? Person?

? ? ?@end?

int ?main ()

{

? ? Person ?* s = ? [ person ?new ];

?[s ?test ];

? return 0;

? ? ?}

?這個程序中類的聲明中什么也沒有牧愁。類的實現(xiàn)也是空的⊥饬可是編譯時只有一個警告猪半,如果加上test 方法的聲明,則編譯無錯誤偷线。鏈接時也可以通過磨确,可是運行時會出現(xiàn)系統(tǒng)崩潰。因為找不到test 方法声邦。 ?如果沒有 test 方法的聲明乏奥,但是有類的實現(xiàn)也是可以的,但是此時亥曹,類的實現(xiàn)必須在 main ?函數(shù)之前邓了。但是這樣不規(guī)范、

封裝的好處:把一個功能封裝到一個方法中去媳瞪。

? ? ? ? ? ? ? ? ? ? ? ? 過濾不合理的值骗炉。

? ? ? ? ? ? ? ? ? ? ? ? ?讓外界不必關(guān)注內(nèi)部的細節(jié)。

類方法:可以直接用類名調(diào)用的方法蛇受。類本身會在內(nèi)存中占據(jù)存貯空間句葵,里面有方法的列表。

類方法以加號開頭兢仰,只能讓類調(diào)用乍丈,類方法可以與對象方法同名。在類方法中不能直接調(diào)用成員變量把将,诗赌。

例如:?

?+ void ?run?

{

? NSLog (@'' ?跑起來了");

}

? 類方法的好處:

? ?不依賴于對象秸弛,執(zhí)行效率高铭若。

? 能用類方法盡量類方法。

? 當(dāng)方法內(nèi)部不需要使用到成員變量時递览,就可以改為類方法叼屠。

? 工具類:基本沒有成員變量,里面的方法基本都是類方法绞铃。

?易錯:

+ void ?run?

{ ?

?[ ?person ?run ?];

? NSLog (@'' ?跑起來了")镜雨;

}

? ? 運行時什么也不輸出,類方法自己調(diào)用自己儿捧,死循環(huán)荚坞。

+ void ?run?

{ ?

NSLog (@'' ?跑起來了")挑宠;

?[ ?person ?run ?];

?}

運行中先輸出,在自己調(diào)用自己颓影,也是死循環(huán)各淀。

? self ?關(guān)鍵字

當(dāng)成員變量與局部變量同名時,采取就近原則诡挂。訪問的事局部變量碎浇。用self 訪問成員變量可以區(qū)分同名的局部變量。

self 只能出現(xiàn)在oc方法中璃俗,不能在函數(shù)中使用奴璃。

self -> 成員變量名: 訪問當(dāng)前對象內(nèi)部的成員變量。

[ self ?方法名]城豁;

// ? 誰調(diào)用了當(dāng)前方法 苟穆,self 就代表誰,類方法中就代表類唱星,對象方法中就代表方法雳旅。

- void ?run?

{ ?

NSLog (@'' ?跑起來了");

?[ ?self ? run ?];

?}?

死循環(huán)自己調(diào)用自己.

2:繼承

繼承是類和類之間的關(guān)系

例如:

?@interface ?Person ?: NSObject?

? ? ? ? ? ? {

? ? ? ? ? ? ? int ?age ;

? ? ? ? ? ? ? double ?weight;

? ? ? ? ? ?}


? ? ? ? ?- void ?test ;

? ? ? ? ? ? @end?

@implementation ? Person?

- void ?test?

{?

NSLog (@'' ?調(diào)用 了人的 test 函數(shù)")魏颓;

}

? ? ?@end?

@interface ? student ?:?Person?


? ? ? ? ? ? @end?

@implementation ? Person?

- void ?test?

{?

NSLog (@'' ?調(diào)用 了學(xué)生的 test 函數(shù)");

}

? ? ?@end?

繼承的好處:student ?繼承了person 的類吱晒,student 成為子類甸饱,person 成為父類。

?注意: 父類應(yīng)寫在子類之前仑濒,因為編輯器是從上往下編譯的叹话,所以父類先定義,子類才能使用墩瞳。

? ? ? ? ? ? ? oc中不允許父類和子類中有相同的成員變量驼壶。

? ? ? ? ? ? ?子類中允許子類跟父類中有相同的實現(xiàn)方法、

? ? ? ? ? ?如果在子類中調(diào)用某個方法喉酌,會優(yōu)先在子類中找有沒有這個方法的實現(xiàn)热凹。找不到的話就去父類中找。每個類中都有一個super 指針泪电,指向它的父類般妙。 也可以在父類中聲明某個方法,但不在父類中實現(xiàn)相速。在子類中實現(xiàn)碟渺。然后在子類中調(diào)用。但是編譯時會有警告突诬。

? ? ? ? 子類重現(xiàn)實現(xiàn)父類中的某個方法苫拍,會覆蓋父類的方法芜繁,優(yōu)先使用子類的。

? 注意:

1: 父類必須聲明在子類之前绒极,實現(xiàn)可在子類后面骏令。

2:調(diào)用某個對象的方法時,會優(yōu)先去當(dāng)前對象對應(yīng)的類中找集峦,如果找不到就順著super 指針去父類中找伏社。

? ?繼承的好處: 抽取了重復(fù)代碼,建立了類之間的關(guān)系塔淤。

? ? ? ? ? ? ? ?缺點: 類之間的耦合性太強摘昌。

?使用場合:

1: 當(dāng)兩個類擁有相同的屬性和方法時,就可以將相同的東西放在一個父類中高蜂。

2:當(dāng)A類擁有B類的部分屬性和方法時聪黎,可以考慮讓B類繼承A類。

使用注意:

?? ??@interface Score: NSObject

? ? ? ? ? ? {

? ? ? ? ? ? ? int ?-cscore ;

? ? ? ? ? ? ? ?int ?-ocscore;

? ? ? ? ? ?}


? ? ? ? ?- void ?test ;

? ? ? ? ? ? @end?

@implementation ? Score

- void ?test?

{?

NSLog (@'' ?調(diào)用 了test 函數(shù)")备恤;

}

? ? ?@end?

@interface Student: NSObject

? ? ? ? ? ? {

? ? ? ? ? ? ? int ?-cscore ;

? ? ? ? ? ? ? ?int ?-ocscore;

? ? ? ? ? ?}


? ? ? ? ?- void ?test ;

? ? ? ? ? ? @end?

@implementation ? Student

- void ?test?

{?

NSLog (@'' ?調(diào)用 了人的 test 函數(shù)")稿饰;

}

? ? ?@end?

雖然這兩個類具有相同的屬性,可是不能用student 繼承score ,因為邏輯上不對露泊。

3:多態(tài)

沒有繼承就沒有多態(tài)喉镰,多態(tài)是指父類指針指向子類對象。

多態(tài)的好處:如果參數(shù)中使用的事父類類型惭笑,可以傳入子類侣姆,父類的對象。

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

  • 序言:七十年代末沉噩,一起剝皮案震驚了整個濱河市捺宗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌川蒙,老刑警劉巖蚜厉,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畜眨,居然都是意外死亡昼牛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門康聂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾嘱,“玉大人,你說我怎么就攤上這事早抠■樱” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悬垃。 經(jīng)常有香客問我游昼,道長,這世上最難降的妖魔是什么尝蠕? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任烘豌,我火速辦了婚禮,結(jié)果婚禮上看彼,老公的妹妹穿的比我還像新娘廊佩。我一直安慰自己,他們只是感情好靖榕,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布标锄。 她就那樣靜靜地躺著,像睡著了一般茁计。 火紅的嫁衣襯著肌膚如雪料皇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天星压,我揣著相機與錄音践剂,去河邊找鬼。 笑死娜膘,一個胖子當(dāng)著我的面吹牛逊脯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竣贪,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼军洼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贾富?” 一聲冷哼從身側(cè)響起歉眷,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤牺六,失蹤者是張志新(化名)和其女友劉穎颤枪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淑际,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡畏纲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了春缕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盗胀。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锄贼,靈堂內(nèi)的尸體忽然破棺而出票灰,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布屑迂,位于F島的核電站浸策,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惹盼。R本人自食惡果不足惜庸汗,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望手报。 院中可真熱鬧蚯舱,春花似錦、人聲如沸掩蛤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盏档。三九已至凶掰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜈亩,已是汗流浹背懦窘。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稚配,地道東北人畅涂。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像道川,于是被迫代替她去往敵國和親午衰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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