多态,就是用最少的代码实现多种状态, 而这些状态在编译时是无法确定,直到程序运行中才会最终确定下来。如比我们开发一款游戏,游戏人物有多种武器装备可供使用。不同的武器装备使用相同的攻击技能,但产生的效果确不相同(比如攻击力,视觉效果等等)。也就是游戏人物调用武器的攻击方法。我们是无法知道玩家当时会选择使用哪种武器进行游戏。那就声明一个武器类指针指向武器子类。这时指向哪种武器子类就会调用哪种武器子类的方法。这就是多态。
多态实现的几个条件:
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;
- }
复制代码
|