Objective-C(5)繼承與多態

來源:互聯網
上載者:User

標籤:objective-c   ios   xcode   對象   類   物件導向   

  • 類的繼承關係

複合關係:has a

繼承關係:is a

     

思考這個問題:

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

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

     狗類和貓類分別實現自己特有的屬性及方法


B繼承A == A派生B

     A稱作父類或基類,B稱作子類或衍生類別

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


繼承關係在介面部分指定:

     @interface className:parentClassName

     ...

     @end

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


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

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

     C++中支援多種繼承方式的指定,即在繼承時可以指定public、protected、private以確定父類中的成員在子類的中的存取權限,OC也不支援多種繼承方式。

     雖然OC並不支援多繼承,但OC中使用“協議”實現了多繼承的一部分功能。

其他說明:

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

     子類調用方法時,是先在當前類中找,找不到再到父類中找

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

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


繼承的工作原理:

    650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/7C/7E/wKiom1bRiwjQQHO7AACRwWguBkI961.png" title="螢幕快照 2016-02-27 下午7.39.11.png" width="500" height="179" border="0" hspace="0" vspace="0" style="width:500px;height:179px;" alt="wKiom1bRiwjQQHO7AACRwWguBkI961.png" />

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


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

     通過self指標可以訪問對象的屬性及調用方法

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

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


  • 重新父類方法

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

     重寫要求:方法名、參數、傳回值與父類方法一致。

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

重寫父類方法時,有時需要執行父類的動作,則使用super指標指定調用父類的方法。


  • 多態

父類指標儲存子類對象地址時,調用方法時出現的情況

     相同訊息給與不同的對象會引發的不同動作


調用對象方法時會檢測對象的真實方法

OC中已經實現了方法的多態


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


多態的好處:

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


多態的局限性:

     父類類型的指標變數是不能用來調用子類的方法 (有時雖然能成功但不推薦)

     如果需要,則應將父類指標轉換為子類指標後再調用子類的方法


  • 多態指標

父類對象指標可以儲存子類對象的地址,這樣的指標被稱作多態指標

     多態指標經常用作參數、傳回值等

id就是OC中最常使用的多態指標類型,相當於NSObject*

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

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

為一個對象指標賦空值時,應當使用nil,而對一個非OC對象指標賦值時,應當使用NULL。





本文出自 “teacherAn” 部落格,請務必保留此出處http://annmeng.blog.51cto.com/3321237/1745611

Objective-C(5)繼承與多態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.