Objective C學習 繼承之殭屍練習

2021-06-25 17:24:16 字數 3621 閱讀 3093

在繼承這一部分,我覺得比較難理解的就是各種初始化方法, 便利構造器等,在這個練習中,比較充分的運用了這幾種方法。

首先是各種類的建立:

然後是殭屍類中的成員變數的定義,初始化,setter、getter方法,被攻擊方法:

@inte***ce corpse : nsobject

- (id)initwithtype:(nsstring *)type

maxhp:(int)maxhp

currenthp:(int)currenthp

losehp:(int)losehp

isdeath:(bool)isdeath;

//  setter getter

- (void)settype:(nsstring *)type;

- (nsstring *)type;

- (void)setmaxhp:(int)maxhp;

- (int)maxhp;

- (void)setcurrenthp:(int)currenthp;

- (int)currenthp;

- (void)setlosehp:(int)losehp;

- (int)losehp;

- (void)setisdeath:(bool)isdeath;

- (bool)isdeath;

//  方法

- (int)attack;

實現:

- (id)initwithtype:(nsstring *)type

maxhp:(int)maxhp

currenthp:(int)currenthp

losehp:(int)losehp

isdeath:(bool)isdeath

return self; }

- (void)settype:(nsstring *)type

- (nsstring *)type

- (void)setmaxhp:(int)maxhp

- (int)maxhp

- (void)setcurrenthp:(int)currenthp

- (int)currenthp

- (void)setlosehp:(int)losehp

- (int)losehp

- (void)setisdeath:(bool)isdeath

- (bool)isdeath

- (int)attack

return

_currenthp; }

因為防具殭屍是繼承於殭屍類,所以其中的宣告方法等就不詳細陳述,主要是對攻擊方法的重寫:

- (int)attack

_currenthp-= _losehp;

if (_currenthp

<= 0)

return

_currenthp; }

同理,鐵通殭屍繼承於防具殭屍,所以對攻擊的重寫:

- (int)attack

_currenthp-= _losehp;

if (_currenthp

<= 0)

return

_currenthp; }

在主函式中分別建立三個物件:普通殭屍,防具殭屍,鐵桶殭屍:

corpse

*a = [[

corpse

alloc

] initwithtype:

@"普通

"maxhp:

50currenthp:

50losehp:

3isdeath:

no];

fjcorpse

*b = [[

fjcorpse

alloc

] initwithtype:

@"路障

"maxhp:

80currenthp:

80losehp:

2isdeath:

nofjtype:

@"路障"];

ironcorpse

*c = [[

ironcorpse

alloc

] initwithtype:

@"鐵通

"maxhp:

120currenthp:

120losehp:

1isdeath:

nofjtype:

@"鐵桶

"weekness:

@"吸鐵石"];

最後實現對三隻殭屍的同時攻擊,我這裡想的是三隻殭屍分別站在三條路上, 下面是**實現:

int i = 0;

while (![a isdeath])

nslog(@"

普通殭屍腦袋掉了

");nslog(@"

攻擊次數:

%d", i);

int j = 0;

while (![b isdeath])

}nslog(@"

路障殭屍腦袋掉了

");nslog(@"

攻擊次數:

%d", j);

int k = 0;

while (![c isdeath])

}nslog(@"

鐵桶殭屍腦袋掉了

");nslog(@"

攻擊次數:

%d", k);

}   最後輸出的結果是:

2014-09-16 16:37:59.818 homework3 test2[1443:303]普通殭屍腦袋掉了

2014-09-16 16:37:59.820 homework3 test2[1443:303]攻擊次數:17

2014-09-16 16:37:59.821 homework3 test2[1443:303]20次攻擊後路障消失

2014-09-16 16:37:59.821 homework3 test2[1443:303]路障殭屍腦袋掉了

2014-09-16 16:37:59.821 homework3 test2[1443:303]攻擊次數:34

2014-09-16 16:37:59.822 homework3 test2[1443:303]34次攻擊後鐵桶被打掉

2014-09-16 16:37:59.822 homework3 test2[1443:303]鐵桶殭屍腦袋掉了

2014-09-16 16:37:59.822 homework3 test2[1443:303]攻擊次數:94

Objective C學習筆記 繼承

1.不要直接更改由繼承得到的例項變數的值,一定要使用方法來更改它們 2.只能繼承乙個 某些語言 例如c 具有多重繼承特性,在這種情況下,乙個類可以直接從兩個或多個類繼承而來。但objective c不支援多繼承,如果你嘗試在objective c中使用多繼承,編譯器將不能正常識別它們,你可以通過ob...

Objective C實現多繼承

我們都知道objective c不能像c 一樣支援多繼承,但是在objective c的使用經常會碰到需要使用多繼承的情況。例如,classa中有methoda,classb中methodb,而現在需要使用這兩個類中的方法。如何按照c 的程式設計思路,毫無疑問採用多繼承就搞定了,在objective...

Objective C中的繼承

1.父類自身也可以有父類,沒有父類的類位於類層次的最頂層,稱為根類 父類也可以被稱為超類 2.繼承中,父類的非私有例項變數和方法都會成為新類定義的一部分。子類可以直接訪問這些方法和例項變數,就像在類定義中直接定義了這些子類一樣。注意 在子類使用例項變數,必須在介面部分宣告,而不是在實現部分宣告。在實...