溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Objective-C(5)繼承與多態(tài)

發(fā)布時間:2020-08-15 15:38:10 來源:網(wǎng)絡(luò) 閱讀:965 作者:ymanmeng123 欄目:移動開發(fā)
  • 類的繼承關(guān)系

復(fù)合關(guān)系:has a

繼承關(guān)系:is a

     

思考這個問題:

     在編寫貓類和狗類時,會發(fā)現(xiàn)這兩個類中有大量相同或者類似的屬性及方法。

     將動物都共有的屬性及方法放在一個動物類中,并讓狗類和貓類都繼承自動物類

     狗類和貓類分別實現(xiàn)自己特有的屬性及方法


B繼承A == A派生B

     A稱作父類或基類,B稱作子類或派生類

     B包含A的所有屬性及方法


繼承關(guān)系在接口部分指定:

     @interface className:parentClassName

     ...

     @end

     NSObject是所有OC類的基類,被稱作“超類”


只能繼承一個 --- 單繼承

     某些語言,如C++,可以多重繼承,即一個類可以有多個父類,OC并不支持多重繼承

     C++中支持多種繼承方式的指定,即在繼承時可以指定public、protected、private以確定父類中的成員在子類的中的訪問權(quán)限,OC也不支持多種繼承方式。

     雖然OC并不支持多繼承,但OC中使用“協(xié)議”實現(xiàn)了多繼承的一部分功能。

其他說明:

     OC中不允許子類與父類擁有相同名字的屬性

     子類調(diào)用方法時,是先在當前類中找,找不到再到父類中找

     子類可以重寫父類的方法,即覆蓋了父類的方法

     父類中的@protected屬性在子類方法中可以訪問,但@private的不能。


繼承的工作原理:

    Objective-C(5)繼承與多態(tài)

    isa是超類NSObject中的成員變量,它指向該類型的類對象


在對象的方法中,self指針指向當前對象

     通過self指針可以訪問對象的屬性及調(diào)用方法

在對象的方法中,super指針指向當前對象的父類部分

     通過super指針可以訪問父類的屬性及調(diào)用方法(尤其是被覆蓋的方法)


  • 重新父類方法

子類中包含父類的所有屬性及方法,其中父類的方法可以在子類中進行重寫。

     重寫要求:方法名、參數(shù)、返回值與父類方法一致。

     如:重寫description方法能夠,能在NSLog以%@輸出時,輸出指定的字符串。

重寫父類方法時,有時需要執(zhí)行父類的動作,則使用super指針指定調(diào)用父類的方法。


  • 多態(tài)

父類指針存儲子類對象地址時,調(diào)用方法時出現(xiàn)的情況

     相同消息給與不同的對象會引發(fā)的不同動作


調(diào)用對象方法時會檢測對象的真實方法

OC中已經(jīng)實現(xiàn)了方法的多態(tài)


注意:讓子類指針指向父類對象 是不安全的做法


多態(tài)的好處:

     用一份代碼代替很多份代碼(如函數(shù)傳遞基類指針)


多態(tài)的局限性:

     父類類型的指針變量是不能用來調(diào)用子類的方法 (有時雖然能成功但不推薦)

     如果需要,則應(yīng)將父類指針轉(zhuǎn)換為子類指針后再調(diào)用子類的方法


  • 多態(tài)指針

父類對象指針可以存儲子類對象的地址,這樣的指針被稱作多態(tài)指針

     多態(tài)指針經(jīng)常用作參數(shù)、返回值等

id就是OC中最常使用的多態(tài)指針類型,相當于NSObject*

另外一個類型 instancetype,也可以認為是id類型

     但只用在一些方法的返回值上,比id類型多了一個類型檢查的功能。

為一個對象指針賦空值時,應(yīng)當使用nil,而對一個非OC對象指針賦值時,應(yīng)當使用NULL。





向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI