黑马程序员技术交流社区
标题:
OC多态的理解
[打印本页]
作者:
xiniuniu
时间:
2014-8-17 17:43
标题:
OC多态的理解
多态,就是用最少的代码实现多种状态, 而这些状态在编译时是无法确定,直到程序运行中才会最终确定下来。如比我们开发一款游戏,游戏人物有多种武器装备可供使用。不同的武器装备使用相同的攻击技能,但产生的效果确不相同(比如攻击力,视觉效果等等)。也就是游戏人物调用武器的攻击方法。我们是无法知道玩家当时会选择使用哪种武器进行游戏。那就声明一个武器类指针指向武器子类。这时指向哪种武器子类就会调用哪种武器子类的方法。这就是多态。
多态实现的几个条件:
1. 多态存在的前提是必须要有继承
2.父类类型指针指向子类对象
3.但多态有一个局限性就是不能调用子类特有的方法
#import <Foundation/Foundation.h>
#include <stdio.h>
/********************* Weapon *************************/
@interface Weapon : NSObject
- (void)attack;
@end
@implementation Weapon
- (void)attack
{
NSLog(@"攻击力一般。效果一般");
}
@end
/********************* Sword *************************/
@interface Sword : Weapon
- (void)attack;
@end
@implementation Sword
- (void)attack
{
NSLog(@"攻击力120, 效果:亮眼");
}
@end
/********************* Gun *************************/
@interface Gun : Weapon
- (void)attack;
@end
@implementation Gun
- (void)attack
{
NSLog(@"攻击力200, 效果:无法直视");
}
@end
/********************* Player *************************/
@interface Player : NSObject
- (void)useWeapon:(Weapon*)arms;
@end
@implementation Player
- (void)useWeapon:(Weapon *)arms
{
[arms attack];
}
@end
int main(int argc, const char * argv[])
{
Player *merry = [Player new];
Weapon *arms = [Weapon new];
Sword *bigSword = [Sword new];
Gun *bigGun = [Gun new];
int choise = 0;
NSLog(@"使用大剑请输入1 , 使用大大枪请输入2");
scanf("%d", &choise);
switch (choise)
{
case 1:
[merry useWeapon:bigSword];
break;
case 2:
[merry useWeapon:bigGun];
break;
default:
[merry useWeapon:arms];
break;
}
return 0;
}
复制代码
作者:
3677065
时间:
2014-8-19 22:54
我的理解还停留在父类指针指向子类
作者:
ixx__123
时间:
2014-8-22 15:42
今天复习了下多态
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2