Objective-C:04_物件導向-三大特性

來源:互聯網
上載者:User

標籤:style   color   io   使用   ar   strong   檔案   div   sp   

三大特性:封裝、繼承、多態

  封裝:    成員變數的封裝     為了過濾不合法的屬性值,我們需要提供一個方法給外界設定age屬性值         set方法             作用:提供一個方法給外界設定成員變數值             命名:方法名必須以set開頭                       set後面跟上成員變數的名稱,成員變數的首字母必須大寫                        傳回值一定是void                       一定要接收一個參數,而且參數類型跟成員變數類型一致                       形參變數的名稱不能和成員變數一樣         get方法:             作用:返回對象內部的成員變數的值             命名規範:                 肯定有傳回值,傳回值類型肯定與成員變數類型一致                 方法名跟成員變數名一樣                 不需要接收任何參數          成員變數盡量不要用@public     枚舉定義方法:        typedof enum{            SexMan,            SexWoman        }Sex;      成員變數的命名規範:一定要以底線 _開頭                作用:                     1、讓成員變數和get方法的名稱區分開                     2、也可以和局部變數區分開,一看到底線開頭的變數,一般都是成員變數      OC本質上還是C語言,本質上還是麵線過程的。還是弱文法。    沒有聲明沒有實現:      調用沒有聲明的方法編譯的時候只有警告。     只會在啟動並執行時候報錯:     -[Person test]: unrecognized selector sent to instance 0x7fe9804076a0:         給Person對象發送了一個不能識別的訊息:test     有聲明沒有實現:     如果對象聲明了一個方法,但是沒有實現,編譯的時候同樣不會報錯,只會有警告。只有在執行的時候會報錯(錯誤和上面的一樣)。     OC是在運行過程中才會檢測對象有沒有實現相應的方法(動態檢測)    沒有聲明有實現:    這樣寫的話沒有警告,也不會報錯。     程式在運行過程中出錯將會閃退。  類方法:     類方法都是以加號(+)開頭     然後調用的時候直接使用類名調用[Person printClassName];        類方法只能使用類名調用,不能使用對象調用。     允許類方法的方法名和對象方法的方法名相同     在類方法中不能訪問執行個體變數        對象方法:        -》減號 - 開頭        -》只能有對象來調用         -》對象方法中能訪問當前對象的成員變數(執行個體變數)    類方法:        -》加號 + 開頭        -》只能由類(名)來調用         -》在類方法中不能訪問執行個體變數          類方法的好處和使用場合:         -》不依賴於對象,執行效率高         -》能用類方法盡量用類方法         -》場合:當方法內部不需要使用到成員變數時,就可以改為類方法     工具類:        基本沒有任何成員變數,裡面的方法基本都是類方法。     self關鍵字     self:誰調用了當前方法,self就代表誰(self如果出現在對象方法中,self代表對象。self如果出現在類方法中,self就代表類)     當成員變數和局部變數同名時,採取就近原則,訪問的是局部變數     用self訪問成員變數,區分同名的局部變數     可以利用"self->成員變數名"訪問當前對象內部的成員變數     可以利用[self 方法名];調用其他的對象方法\類方法     self不管是在類方法還是對象方法中,如果調用自己,那麼就會形成死迴圈     在類方法中的self不能調用對象方法,對象方法中的self不能調用類方法     self不能調用函數   繼承:    繼承的好處:        1、抽取重複代碼        2、建立了類之間的關係        3、子類可以擁有父類中的所有成員變數和方法    注意點:         基本上所有類的根類是NSObject         如果寫在同一個檔案中,那麼父類必須s要寫在前面         OC中不允許子類和父類擁有相同名稱的成員變數         子類重新實現父類的某個方法,不需要像C#中的需要關鍵字         調用某個方法時,優先去當前類中找,如果找不到,就去父類中找          每個類中都有一個superclass指標,指向該類的父類       繼承的壞處:耦合性太強了。         所以繼承不能亂用        繼承的使用場合:        1、當兩個類擁有相同屬性和方法的時候,就可以將相同的東西抽取到一個父類中        2、當A類擁有B類中的部分屬性和方法時,可以考慮讓B類繼承A類            繼承:xx是xxx        組合:xxx擁有xxx    組合:(學生繼承成績,在邏輯上不通,這時候就可以使用組合)        @interface Score : NSObject        {            int _cScore;            int _ocScore;        }            @end     @implementation Score    @end     @interface Student:NSObject    {         Score *_score;//這種方式就是組合        int _age;    }    @end    @implementation Student    @end  super:         調用父類的方法。(在重寫父類的test方法中想調用父類的test方法或者其他方法,使用[super 方法名])         super處在對象方法中,那麼就會調用父類中的對象方法         super處在類方法中,那麼就會調用父類中的類方法          使用情境:         子類重寫父類的方法時,想保留父類的一些行為         多態         父類指標指向子類對象         沒有繼承就沒有多態     代碼的體現:父類類型的指標指向子類對象     好處:如果函數\方法參數中使用的是父類類型,可以傳入父類、子類對象     局限性:         父類類型的變數,不能直接調用子類特有的方法,必須強轉成子類類型變數後,才能直接調用子類特有的方法。             調用方法的時候會檢測對象的真實形象        如果參數中使用的是父類類型,可以傳入父類、子類對象  多態的局限性: 父類類型的變數,不能用來調用子類的方法。     Dog類繼承自Animal類    Animal  *aa=[Dog new];    Dog  *dd=( Dog *)aa ;//強制類型轉換,將aa轉換成Dog *類型的變數          如果有不對的地方請大家指正!!

Objective-C:04_物件導向-三大特性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.