黑馬程式設計師 OC中的多型

2021-06-29 06:06:07 字數 1973 閱讀 3790

一、基本概念

多型在**中的體現,即為某一類事物的多種形態,oc

物件具有多型性。必須要有繼承,沒有繼承就沒有多型。

在使用多型時,會進行動態檢測,以呼叫真實的物件方法。

多型在**中的體現即父類指標指向子類物件。

person *p = [student 

new];23

p->age = 

100;45

[p walk];

用父類接收引數,節省** 

一、基本概念

多型在**中的體現,即為某一類事物的多種形態,oc

物件具有多型性。必須要有繼承,沒有繼承就沒有多型。

在使用多型時,會進行動態檢測,以呼叫真實的物件方法。

多型在**中的體現即父類指標指向子類物件。

1 person *p = [student new];2 3 p->age = 100;4 5 [p walk];

二、多型使用注意 1

.多型的好處

用父類接收引數,節省** 

需要乙個新的函式專門用來餵狗

void feed(dog *d)

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

void feed(cat *c)

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

這裡只需要把函式的引數寫成是animal *

型別的,那麼

dog和

cat型別的物件就都可以傳入進來。

呼叫的時候直接改變引數就可以了。 2

.多型的侷限性

不能訪問子類的屬性(可以考慮強制轉換)

不建議的做法:

animal *a=[[dog alloc] init];

[a run]; // 

在animal

類中沒有

run方法,這裡呼叫了狗物件的方法。

解決方法:可以將a

強制轉換為

dog*

型別的變數,如下:

dog *d=(dog *)a; // 

使用強制轉換,這裡a和

d指向的是同乙個狗物件 3.

多型的細節

動態繫結:在執行時根據物件的型別確定動態呼叫的方法

#import 

@inte***ce person : nsobject

@end

int main()

注意:

字串物件的length

方法:計算的是字串的字數,而不是像

strlen

函式那樣,計算的是字元數。如「哈

ha123」length

得出的結果是

6,返回

unsigned long

型別,而

strlen

函式得出的結果是

8,因為乙個漢字佔

3個位元組。

#import 

// 動物

@inte***ce animal : nsobject

- (void)eat;

@end

@implementation animal

- (void)eat

@end

// 狗

@inte***ce dog : animal

- (void)run;

@end

@implementation  dog

- (void)run

- (void)eat

@end

// 貓

@inte***ce cat : animal

@end

@implementation cat

- (void)eat

@end

// 如果引數中使用的是父類型別,可以傳入父類、子類物件

void feed(animal *a)

int main()

黑馬程式設計師 OC語言 多型

1.多型的基本概念 某一類事物的多種形態 oc物件具有多型性 2.多型的體現 person p student new p age 100 p walk 子類物件賦值給父類指標 父類指標訪問對應的屬性和方法 3.多型的好處 用父類接收引數,節省 4.多型的侷限性 不能訪問子類的屬性 可以考慮強制轉換...

黑馬程式設計師 OC中的封裝 繼承和多型

一.封裝 將實現細節進行隱藏,將屬性私有化,通過公共的方法訪問私有的屬性,這個過程就是對物件的封裝 好處 1.給資料進行了過濾,保證資料的正確性 2.增加了 的重用性 3.將屬性進行了私有化,可以保證屬性的安全性 重寫 當子類當中有與父類同名 同名,同參,同返回值,同型別 的方法的時候,叫重寫 當重...

黑馬程式設計師 多型

asp.net android ios rel noopener noreferrer target blank asp.net android ios開發 net rel noopener noreferrer target blank net培訓 期待與您交流!多型 理解為事物存在的多種體現形似...