Objective-C-物件導向—多態

來源:互聯網
上載者:User

標籤:style   blog   http   ar   使用   sp   strong   on   2014   

 

一、基本概念

多態在代碼中的體現,即為多種形態,必須要有繼承,沒有繼承就沒有多態。

在使用多態是,會進行動態檢測,以調用真實的對象方法。

多態在代碼中的體現即父類指標指向子類對象。

Animal類的聲明

 

Animal類的實現

 

Dog類繼承自Animal類

 

Dog類的實現

 

測試程式:

 

 

二、使用注意

程式碼分析:

Dog *d=[[Animal  alloc] init];   動物是一條狗?語義正確嗎?

NSString *str=[Dog  new];     狗是一個字串?正確嗎?

Oc語言是一門弱文法的語言,編譯的時候並不會報錯,所以這就要求我們在實際的開發過程中一定要按照既定的規範來寫代碼,不要出現狗是一個字串這樣的問題。

多態的好處:

需要一個新的函數專門用來喂狗

Void feed(Dog *d)

{

[d  eat];

}

如果這個時候也需要喂貓,那就應該重寫新一個新的函數

Void feed(Cat *c)

{

[c  eat];

}

而狗和貓實際上都繼承自動物這個類,在這裡就可以使用多態來簡化代碼了。

這裡只需要把函數的參數寫成是Animal *類型的,那麼Dog和Cat類型的對象就都可以傳入進來。

調用的時候直接改變參數就可以了。

 

多態的局限性:父類類型的指標變數不能直接調用子類特有的方法。

不建議的做法~

Animal *a=[[Dog alloc] init];

[a run];//在Animal類中沒有run方法,這裡調用了狗對象的方法。

解決方案:可以將a強制轉換為Dog*類型的變數,如下:

Dog *d=(Dog *)a;//使用強制轉換,這裡a和d指向的是同一個狗對象

 

三、多態使用總結

(1)沒有繼承就沒有多態

(2)代碼的體現:父類類型的指標指向子類對象

(3)好處:如果函數方法參數中使用的是父類類型,則可以傳入父類和子類對象,而不用再去定義多個函數來和相應的類進行匹配了。

(4)局限性:父類類型的變數不能直接調用子類特有的方法,如果必須要調用,則必須強制轉換為子類特有的方法。

 

四、字串補充內容

@“234”字串也是一個對象,屬於NSString這個類。下面是對字串對象的一些代碼說明:

 

字串對象的length方法:計算的是字串的字數,而不是像strlen函數那樣,計算的是字元數。如“哈ha123”length得出的結果是6,返回unsigned long類型,而strlen函數得出的結果是8,因為一個漢字佔3個位元組。

提示:字數也包括空格。

 

Objective-C-物件導向—多態

相關文章

聯繫我們

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