黑马程序员技术交流社区
标题:
昨天有好多人问多态,不懂的可以看看
[打印本页]
作者:
安若曦
时间:
2015-9-11 13:28
标题:
昨天有好多人问多态,不懂的可以看看
本帖最后由 安若曦 于 2015-9-11 13:59 编辑
大家问我就来说说:
#import <Foundation/Foundation.h>
/*
多态的概念:
不同的对象用自己的方式响应相同名称方法的能力就称之为多态。
体现出来:
父类的指针指向子类对象
多态条件:
有继承关系,
有方法重写(子类把父类的同名方法给重写了)
*/
@interface Animal : NSObject
-(void)run;
@end
@implementation Animal
-(void)run{
NSLog(@"动物在跑");
}
@end
//Dog类继承了Animal类,Animal是Dog的父类
@interface Dog : Animal
-(void)run; //这句话可以不写
-(void)eat;
@end
@implementation Dog
//重写了父类的run方法
-(void)run{
NSLog(@"狗以80码的速度冲出去,没撞树上");
}
//自己增加了新的方法
-(void)eat{
NSLog(@"狗在吃东西");
}
@end
//Cat类继承了Animal类,Animal也是Cat的父类
@interface Cat : Animal
@end
@implementation Cat
//重写父类的run方法
-(void)run{
NSLog(@"猫在爬树");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
//没有使用多态
Animal *animal = [Animal new];
[animal run]; //输出结果:动物在跑
//********* 使用多态 ********
//父类指针指向 子类对象
Animal *a2 = [Dog new];
[a2 run]; //打印结果:狗以80码的速度冲出去,没撞树上
Animal *a3 = [Cat new];
[a3 run]; //打印结果:猫在爬树
//******** 多态使用注意 ************
Animal *ani6 = [Dog new];
//ani6 是 animal 类型
//编译器会报错
// [ani6 eat]; //错误的
//(Dog *)ani6 这句话是把 ani6 强制转换为 dog 类型
[(Dog *)ani6 eat]; //正确的
//
Animal *a8 = [Animal new];
// [a8 eat]; //这样是错误的用法
// [(Dog *)a8 eat]; //这样也是不对的
}
return 0;
}
复制代码
作者:
liminghui
时间:
2015-9-11 18:47
楼主辛苦了! 赞下。
作者:
陈杨
时间:
2015-9-11 19:13
叼叼叼~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2