oc物件導向—多型
一、基本概念
多型在**中的體現,即為多種形態,必須要有繼承,沒有繼承就沒有多型。
在使用多型是,會進行動態檢測,以呼叫真實的物件方法。
多型在**中的體現即父類指標指向子類物件。
animal類的宣告
animal類的實現
dog類繼承自animal類
dog類的實現
測試程式:
二、使用注意
**分析:
dog *d=[[animal alloc] init]; 動物是一條狗?語義正確嗎?
nsstring *str=[dog new]; 狗是乙個字串?正確嗎?
oc語言是一門弱語法的語言,編譯的時候並不會報錯,所以這就要求我們在實際的開發過程中一定要按照既定的規範來寫**,不要出現狗是乙個字串這樣的問題。
多型的好處:
需要乙個新的函式專門用來餵狗
void feed(dog *d)
如果這個時候也需要喂貓,那就應該重寫新乙個新的函式
void feed(cat *c)
而狗和貓實際上都繼承自動物這個類,在這裡就可以使用多型來簡化**了。
這裡只需要把函式的引數寫成是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個位元組。
iOS開發物件導向篇 封裝
oc物件導向 封裝 一 物件導向和封裝 物件導向的三大特性 封裝 成員變數 繼承和多型 在oc語言中,使用 inte ce和 implementation來處理類。inte ce就好像暴露在外面的時鐘表面,像外界提供展示以及介面。implementation就好像隱藏在時鐘內部的構造實現,把具體的實...
iOS開發 物件導向三大特徵
向物件的三大特徵,並作簡單的介紹 物件導向三大特徵為封裝,繼承,多型.封裝是封好乙個抽像的類,隱藏內部的實現,對外部提供介面.來方便外界進行呼叫.繼承是可以使用現有類的所有功能,並且在無需編寫原來類的情況下對這些功能進行擴充套件.子類可以繼承父類所有的特徵和行為,比如a繼承於b,b繼承於c,那麼a就...
iOS開發 面試
今天一大清早去面試,公司距離我家還挺近的,花了乙個小時走著去,也順路印下簡歷,理理思路,到了公司面試官什麼的都不錯,還給我講了很多知識,收穫也是滿滿的,總結下今天都遇到了哪些問題,調整調整狀態.1,當需要自定義tabbar的item的數量可變時怎麼做的 這裡原本是想說自定義tabbar的,不過估計考...