黑馬程式設計師 OC學習之類的繼承和多型

2021-07-04 02:55:48 字數 2659 閱讀 1145

我們都知道,物件導向程式設計中的類有三大特性:繼承,封裝,多型。今天主要總結一下繼承和多型。

程式的世界和人類的「物件」世界在思想上是沒有設麼區別的,富二代繼承了父母,自然就擁有了父母擁有的所有資源,子類繼承了父類同樣就擁有了父類所有的方法和屬性(成員變數)。繼承是類中的乙個重要的特性,他的出現使得我們沒必要別寫重複的**,可重用性很高。

在這裡動物是貓類和狗類的父類,黑貓和白貓類是貓類的子類。我們可以這樣理解,對於貓和夠來說,動物擁有的一切貓和狗都同時擁有。

**如下:

@inte***ce animal:nsobject

@property int age; //年齡

@property double weight; 體重

- (void)eat; //吃東西

- (void)laugh; //微笑

@end

@implementation animal

- (void)eat

- (void)laugh

@end

@inte***ce cat:animal //貓繼承自動物

//自動擁有動物類的屬性

@end

@implementation cat

//自動擁有動物類的方法

@end

oc語言是單繼承語言。在oc語言中,基本上所有類的根類都是nsobject類。

@inte***ce animal:nsobject

//動物裡繼承了nsobject,獲得nsobject類的方法;

@end

@inte***ce dog :animal

//dog類繼承animal類

@end

// bird的宣告

@inte***ce bird : animal

- (void)fly;

@end

// bird的定義

@implementation bird

- (void)fly

@end

// dog的宣告

@inte***ce dog : animal

- (void)run;

@end

// dog的定義

@implementation dog

- (void)run

@end

優點:

不改變原來模型的基礎上,拓充方法

建立了類與類之間的聯絡

抽取了公共**

壞處:

耦合性強

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

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

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

父類的宣告與實現

// 動物

@inte***ce animal : nsobject

- (void)eat;

@end

@implementation animal

- (void)eat

@end

子類的宣告與實現

// 貓

@inte***ce cat : animal

@end

@implementation cat

- (void)eat

@end

多型的表現:

int main()

animal *a=[cat new]; //貓是個動物

[a run];

cat c=[cat new];

[c run];

子類物件賦值給父類指標

父類指標訪問對應的屬性和方法

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

nsstring *str=[dog  new];     狗是乙個字串?正確嗎?

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

多型的好處:

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

void feed(dog *d)

同時也需要乙個函式用來喂貓

void feed(cat *c)

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

這裡只需要把函式的引數寫成是animal *型別的,那麼dog和cat型別的物件就都可以傳入進來。

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

1.沒有繼承就沒有多型

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

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

4.**的體現:父類型別的指標指向子類物件

5.好處:如果函式

\方法引數中使用的是父類型別,可以傳入父類、子類物件

黑馬程式設計師 OC學習之類和物件

1 物件導向和面向過程 物件導向和面向過程是程式設計的兩種思考方式。物件導向,簡稱oop,它是以事物為中心,參與事件的事物是核心,完成事件只是事物的乙個小任務。面向過程,簡稱opp,它是以事件為中心,事件是核心,列出了完成事件的每乙個步驟,一步一步完成。也就是物件導向側重於從問題在尋找客體 客體的作...

黑馬程式設計師 OC之類和物件

類 類是抽象的 物件 物件是具體 ios培訓 android培訓 期待與您交流!1 設計乙個類的步驟 1 類名,2 屬性,3 行為 功能 1 擁有相同屬性和行為的類都可以抽象出乙個類 2 設計乙個植物大戰殭屍中的殭屍 1 類名 zoombie 2 屬性 life speed gongjili 3 行...

黑馬程式設計師 OC的繼承

oc物件導向 繼承 一 基本概念 程式的世界和人類的 物件 世界在思想上是沒有設麼區別的,富二代繼承了父母,自然就擁有了父母擁有的所有資源,子類繼承了父類同樣就擁有了父類所有的方法和屬性 成員變數 在這裡動物是貓類和狗類的父類,黑貓和白貓類是貓類的子類。繼承的好處 1 抽取出了重複的 2 建立了類和...