OC物件導向 多型

2022-05-19 17:32:56 字數 3757 閱讀 1301

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個位元組。

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個位元組。

OC物件導向 多型

oc物件導向 多型 一 基本概念 多型在 中的體現,即為多種形態,必須要有繼承,沒有繼承就沒有多型。在使用多型是,會進行動態檢測,以呼叫真實的物件方法。多型在 中的體現即父類指標指向子類物件。animal類的宣告 animal類的實現 dog類繼承自 animal類 dog類的實現 測試程式 二 使...

OC物件導向 多型

oc物件導向 多型 一 基本概念 多型在 中的體現,即為多種形態,必須要有繼承,沒有繼承就沒有多型。在使用多型是,會進行動態檢測,以呼叫真實的物件方法。多型在 中的體現即父類指標指向子類物件。animal類的宣告 animal類的實現 dog類繼承自 animal類 dog類的實現 測試程式 二 使...

OC物件導向之多型

一 多型的基本概念 多型 polymorphism 按字面的意思就是 多種狀態 在物件導向語言中,介面的多種不同的實現方式即為多型。引用charlie calverts對多型的描述 多型性是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性...