博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 多态的简单思想
阅读量:6802 次
发布时间:2019-06-26

本文共 1878 字,大约阅读时间需要 6 分钟。

/** *  多态:多种形态,是对于对象而言的,如果没有继承就没有多态 *   *  在代码中体现:就是通过定义父类指针指向子类的对象 * *  好处:在函数或者方法的参数中如果传入的是父类指针,那么实现的时候可以传入父类或者子类对象          比如多个子类在完成同一个动作的时候,可以直接将父类指针作为参数传入,那么子类在实现的时候就可以将子类作为参数直接调用方法而完成功能。否则就要为每       一个子类写一个方法,这样就可以省略代码。     局限性:父类类型的指针不能直接访问子类中特别的方法,如果要调用的话必须把父类的指针强制转换成为子 类类型 * */#import 
/************* Animal *************/@interface Animal : NSObject- (void)eat;@end@implementation Animal- (void)eat{ NSLog(@"动物在吃东西");}@end/************* Dog *************/@interface Dog : Animal- (void)eat;@end@implementation Dog- (void)eat{ NSLog(@"狗在吃东西");}@end/************* Cat *************/@interface Cat : Animal- (void)eat;- (void)catchMouse;@end@implementation Cat- (void)eat{ NSLog(@"猫在吃东西");} - (void)catchMouse{ NSLog(@"猫抓老鼠");}@end// "喂"所有的动物 定义函数实现void feed(Animal *animal){ NSLog(@"给一块骨头");}// main方法int main(){ // 对象的第一种形态:以“狗”的形态存在 Dog *dog1 = [Dog new]; /* 对象的第二种形态这种形态:以“动物”的形态存在 就是父类的指针指向子类的对象 定义一个“动物指针”dog2,指向“狗”类的对象的地址 */ Animal *dog2 = [Dog new]; /* 执行的时候会动态检测对象dog2的真实类型!是父类“Ainimal“呢还是子类”Dog”呢 打印结果是:狗在吃东西 说明dog2这个父类指针,在内存中指的还是子类”Dog“的内存地址,因此执行的是Dog类里面的方法 因此dog2还是”Dog“类型 */ [dog2 eat]; // 动态检测dog2到底是什么类型 /* 需求:喂”狗“和”猫“吃骨头 体现多态的优点 这样的话:就可以直接通过在函数中定义的父类指针指向所有的子类对象 这样写就可以直接在一个函数中完成”喂“和”狗“和”猫“的需求 */ Dog *dog3 = [Dog new]; feed(dog3); Cat *cat = [Cat new]; feed(cat); /* 多态的局限性:父类的指针不能直接访问子类特有的方法 */ Animal *cat1 = [Cat new]; /* [cat1 catchMouse]; 这样写在xCode中报错,在命令行工具中只是警告可以运行! cat1虽然是父类的指针,但是它指向的就是Cat类那么应该可以访问到Cat类里面的方法! 但是编译器会认为cat1是Animal类型,会在Animal类中寻找catchMouse方法,找不到结果报错! */ // 强制转换指针类型就可以了 Cat *c = (Cat *)cat1; // 首先将父类指针转换成为子类Cat的类型 [c catchMouse]; // 这样编译器认为catchMouse是在子类中,然后寻找到就不报错了!}

 

转载于:https://www.cnblogs.com/QM80/p/3569893.html

你可能感兴趣的文章
CEPH Cache Tiering
查看>>
Oracle 11g新特性之--Server Result Cache
查看>>
Oracle中的ORA-01548: active rollback segment '_SYSSMU1$' found
查看>>
AngularJs $anchorScroll、$controller、$document
查看>>
Microsoft资源
查看>>
WordPress 永久链接或固定链接设置技巧
查看>>
数据结构之线性表
查看>>
在PPT中插入FLASH遇到的系列问题
查看>>
XSS研究4-来自外部的XSS攻击的防范
查看>>
Spring知识点总结-1
查看>>
微软私有云分享(R2)21 BMC提升B格
查看>>
MDSF:如何使用GMF来做TOGAF建模工具
查看>>
Spring Security简介
查看>>
打造一流的研发中心
查看>>
MCollective架构篇3-Puppet插件的部署及测试
查看>>
配置GNS使用CRT连接
查看>>
Java:集合类性能分析
查看>>
cms无法登陆
查看>>
JavaScript中事件处理
查看>>
VSTO 向office文档中插入内容
查看>>