在繼承這一部分,我覺得比較難理解的就是各種初始化方法, 便利構造器等,在這個練習中,比較充分的運用了這幾種方法。
首先是各種類的建立:
然後是殭屍類中的成員變數的定義,初始化,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.繼承中,父類的非私有例項變數和方法都會成為新類定義的一部分。子類可以直接訪問這些方法和例項變數,就像在類定義中直接定義了這些子類一樣。注意 在子類使用例項變數,必須在介面部分宣告,而不是在實現部分宣告。在實...