黑马程序员-OC语言-多态
2015-12-19 14:29
579 查看
——- ios培训、ios培训、期待与您交流! ———-
什么是多态
多态:是指一种事物的多种形态.
代码体现: 父类的指针指向子类的对象
多态有什么作用?
具有极强的扩展性.父类的一个指针可以表示不同的子类为对象.
Animal *a=[Dog new];//a指向Dog对象
Animal *a=[Cat new];//a也可以指向Cat对象
多态有什么局限?
父类的指针指向子类时,如果要调用子类的独有方法,必须强转.
代码体现
代码中的注释会详细解释多态的每一个特点
关于多态的一些思考
1.必须是继承关系的类才可以.而且是父类的指针代表子类对象.
2.可以用父类的指针指向任意一个子类的对象,操作子类对象调用方法,但是如果这个指针想要操作的是子类独有独有方法的时候不太适合用.
什么是多态
多态:是指一种事物的多种形态.
代码体现: 父类的指针指向子类的对象
Dog *d=[Dog new];//普通写法 Animal *a=[Dog new];//多态写法
多态有什么作用?
具有极强的扩展性.父类的一个指针可以表示不同的子类为对象.
Animal *a=[Dog new];//a指向Dog对象
Animal *a=[Cat new];//a也可以指向Cat对象
多态有什么局限?
父类的指针指向子类时,如果要调用子类的独有方法,必须强转.
代码体现
代码中的注释会详细解释多态的每一个特点
#import <Foundation/Foundation.h> //父类--动物 @interface Animal : NSObject{ char *_name; } -(void)setName:(char *)name; -(char *)getName; -(void)eat; @end @implementation Animal -(void)setName:(char *)name{ _name=name; } -(char *)getName{ return _name; } -(void)eat{ NSLog(@"动物吃东西..."); } @end //动物类的子类-狗 @interface Dog : Animal -(void)eat;//这个地方的声明可以不写,因为父类中有这个方法的声明 -(void)kanMen;//狗独有的方法 @end @implementation Dog //这里是重写了父类中eat方法,Dog对象在调用eat方法是优先调用自己的方法. -(void)eat{ NSLog(@"狗吃东西..."); } -(void)kanMen{ NSLog(@"狗看门..."); } @end //动物类的子类-猫 @interface Cat : Animal -(void)eat; @end @implementation Cat -(void)eat{ NSLog(@"猫吃东西..."); } @end int main(){ Animal *am=[Dog new]; // [am kanMen];//这样调用是不对的,因为kanmen这个方法是子类Dog独有的,不能用多态指针直接调用. //用多态的方式调用子类的方法-->强转 Dog *tempDog=(Dog *)am; [tempDog kanMen]; am=[Cat new]; [am eat];//am现在只想Cat对象调用的是Cat中重写的eat方法. return 0; }
关于多态的一些思考
1.必须是继承关系的类才可以.而且是父类的指针代表子类对象.
2.可以用父类的指针指向任意一个子类的对象,操作子类对象调用方法,但是如果这个指针想要操作的是子类独有独有方法的时候不太适合用.
相关文章推荐
- C#、ASP.NET通用扩展工具类之TypeParse
- Lua编程示例(二):面向对象、metatable对表进行扩展
- Windows Powershell扩展类型系统
- C#与.net高级编程 C#的多态介绍
- C#中面向对象编程机制之多态学习笔记
- C#中的多态深入理解
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#中多态、重载、重写区别分析
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- SQL Server下几个危险的扩展存储过程
- jQuery 学习第七课 扩展jQuery的功能 插件开发
- 运行Node.js的IIS扩展iisnode安装配置笔记
- 基于MySql的扩展功能生成全局ID
- jquery通过扩展select控件实现支持enter或focus选择的方法
- 一个扩展时间段的dir命令的vbs脚本
- Ruby中使用SWIG编写ruby扩展模块实例
- PHP memcache扩展的三种安装方法
- 用C/C++扩展你的PHP 为你的php增加功能
- .NET 扩展实现代码
- JS扩展方法实例分析