黑 馬 程 序 員_視頻學習總結<Objective-C>----02 三大特性

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   資料   io   

 ---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ----------------------

 

 物件導向的三大特性(精華):(成員變數、方法)封裝、繼承、多態。 一、封裝 1.為什麼需要封裝?

根據以前學的內容,假如我聲明一個student類,裡面有public成員age.。我在主函數中寫代碼 student *s = [studentnew]。這樣的話我可以通過s→age修改age的值,但是會出現s→age=-10這種賦值,但是我們都知道年齡不可能為-10歲,我們沒有辦法阻值這種不合理的賦值。我們改變訪問成員變數的方法,使得該方法能夠濾掉不合理的賦值。

@interface就好像暴露在外面的時鐘錶面,像外界提供展示以及介面。@implementation就好像隱藏在時鐘內部的構造實現,把具體的實現封裝了起來。

2.Set方法:

在開發過程中,考慮到安全性要求,我們一般不在成員變數名前面使用@public、@protected等關鍵字修飾,而是使用Set方法來為對象提供成員變數的值。在set方法的內部也可以對一些不合理的賦值進行篩選過濾。

Set方法的作用:為外界提供一個設定成員變數值的方法

命名規範:

(1)方法名必須以set開頭

(2)Set後面跟上成員變數的名稱,首字母大寫

(3)傳回值一定是void

(4)一定要接收一個參數,而且參數類型需要和成員變數的類型一致

(5)形參名不能喝成員變數名一樣(蘋果官方推薦成員變數名前加_以示區分)

Set方法的好處:

(1)不讓資料暴露在外,保證了資料的安全性

(2)對設定的資料進行過濾

Set方法使用樣本:

Set方法的聲明:

Set方法的實現:

主函數:

3.get方法:

Get方法的作用:為調用者返回對象內部的成員變數

命名規範:

(1)一定有傳回值,傳回值的類型和成員變數的類型一致

(2)方法名和成員變數名一樣

(3)不需要接收任何參數

Get方法使用樣本:

Get方法的聲明:

Get方法的實現:

主函數:

注意1:在實際的開發中,不一定set和get方法都會提供,如果內部的成員變數比如學生的學號這樣的資料只允許外界讀取,但是不允許修改的情況,則通常只提供get方法而不提供set方法。

注意2:成員變數名的命名以底線開頭,get方法名不需要帶底線,使用底線開頭有兩個好處:(1)與get方法的方法名區分開來;(2)可以喝一些其他的局部變數區分開來,底線開頭的變數,通常都是類的成員變數。

4. 封裝的好處: 把細節、內部成員隱藏在裡面,保證了資料的安全性。有時候不會提供set方法和get方法,例如成員變數中如果有唯讀成員變數,只需提供get方法,不提供set方法即可。 6. 成員變數的命名規範:一定要以底線_開頭。好處為:

1>    觀察4中執行個體裡發現get的方法名和成員變數名一致,容易混淆。加入底線可以區分這兩個。

2>    可以跟局部變數區分開,一看到底線開頭的變數,一般都是成員變數,方便交流。

 

二、繼承 1.為什麼要使用繼承?

假如有一個類dog和一個類cat,他們的成員變數都是age、weight。方法也都一樣。那麼在兩個類裡面分別定義聲明就很囉嗦,很多東西都是一樣的。我們可以把這些相同的東西提取出來組成一個類animal,然後使用繼承功能,使dog、cat繼承animal類就具備animal的全部內容。在這個例子中dog、cat是animal的子類,animal是cat、dog的父類。使用這個功能可簡化大量代碼。

2.繼承的好處:

1>抽取重複代碼

2>建立了類的關係

3>子類可以擁有父類中所有成員變數和方法

3.注意點:基本上所有類的根類都是NSObject,new來自它,new是類方法。 4.繼承使用注意點:

1>父類必須放在子類前面

2>不允許子類和父類擁有擁有相同名稱的的成員變數

3>調用某個方法時,優先去當前類中找,如果找不到去父類找

5.重寫:子類重新實現父類中的某個方法,稱為重寫,可以覆蓋父類以前的做法。 6.繼承的壞處:使代碼的耦合性太強了 7.組合和繼承區別:繼承為xx是xx(student是person)、組合為xx有xx(student 有score)。 8.關鍵字super:

1>同self一樣是不需要加@的關鍵字

2>直接調用父類中的某個方法

3>super處在對象方法中,那麼就會調用父類對象方法;super處在類方法中,那麼就會調用父類的類方法。

3>比較常見的使用情境為,子類重寫父類方法時想保留父類的行為。

 

三、多態 1. 多態實質:父類指標指向子類對象,沒有繼承就沒有多態 2.多態的好處

在2的基礎上再設計一個類cat繼承animal,重寫eat方法,輸出“cat eat----”,再設計一個函數feed函數如下:

void feed (dog*d){        [d eat];}

這個函數可以執行dog吃的動作,但是不能執行cat吃東西的動作,如果想在主函數中調用讓cat吃東西的話,還要設計一個函數如下:

void feed2 (cat*c){        [c eat];}

這樣在主函數中寫入如下代碼:

Dog *dd = [Dognew];Cat *cc = [Catnew];feed(dd);feed(cc);

這樣才能成功調用貓和狗的吃。

3.多態局限性:

如果上述例子的狗類中多加一個對象方法run,執行如下代碼:

Animal *a = [Dognew];[a run];

執行上述代碼時發現有警告但能運行,我們規定不能這樣寫。這是多態的局限性:父類類型的指標不能用來調用子類的特有方法。如果實在想調用可以用強制轉換的方法實現,代碼如下:

Animal *a = [Dognew];Dog *d = [Dog *]a;[d run];

即必須轉化為子類類型指標變數。

 

 

 

 

---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ----------------------

詳細請查看:www.itheima.com

相關文章

聯繫我們

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