织赢在路上ios开发培训中心提供:iOS培训,iOS培训班,iOS工程师培训,iOS程序员培训,iOS开发,iOS编程,iOS系统开发等一系列培训服务。

免费咨询热线:4006-113-575
当前位置: > OC语言 >

才能直接调用子类特有的方法 */ // 动物 @interface Animal : NSObject - (void)

时间:2016-03-11 05:36来源:网络整理 作者:iOS开发 点击:
1.多态的基本概念某一类事物的多种形态OC对象具有多态性2.多态的体现Person *p = [Student new];p-age = 100;[p walk];子类对象赋值给父类指针父类指

1.多态的基本概念
某一类事物的多种形态
OC对象具有多态性

2.多态的体现
Person *p = [Student new];
p->age = 100;
[p walk];
子类对象赋值给父类指针
父类指针访问对应的属性和方法

3.多态的好处
用父类接收参数,节省代码

4.多态的局限性
不能访问子类的属性(可以考虑强制转换)

5.多态的细节
动态绑定:在运行时根据对象的类型确定动态调用的方法

6.代码

#import <Foundation/Foundation.h> /* 多态 1.没有继承就没有多态 2.代码的体现:父类类型的指针指向子类对象 3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象 4.局限性: 1> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法 */ // 动物 @interface Animal : NSObject - (void)eat; @end @implementation Animal - (void)eat { NSLog(@"Animal-吃东西----"); } @end // 狗 @interface Dog : Animal - (void)run; @end @implementation Dog - (void)run { NSLog(@"Dog---跑起来"); } - (void)eat { NSLog(@"Dog-吃东西----"); } @end // 猫 @interface Cat : Animal @end @implementation Cat - (void)eat { NSLog(@"Cat-吃东西----"); } @end // 这个函数是专门用来喂动画 //void feed(Dog *d) //{ // [d eat]; //} // //void feed2(Cat *c) //{ // [c eat]; //} // // 如果参数中使用的是父类类型,可以传入父类、子类对象 void feed(Animal *a) { [a eat]; } int main() { // NSString *d = [Cat new]; // [d eat]; /* Animal *aa = [Dog new]; // 多态的局限性:父类类型的变量 不能 用来调用子类的方法 //[aa run]; // 将aa转为Dog *类型的变量 Dog *dd = (Dog *)aa; [dd run]; */ //Dog *d = [Dog new]; //[d run]; /* Animal *aa = [Animal new]; feed(aa); Dog *dd = [Dog new]; feed(dd); Cat *cc = [Cat new]; feed(cc); */ /* // NSString *s = [Cat new]; Animal *c = [Cat new]; NSObject *n = [Dog new]; NSObject *n2 = [Animal new]; // 多种形态 //Dog *d = [Dog new]; // Dog类型 // 多态:父类指针指向子类对象 Animal *a = [Dog new]; // 调用方法时会检测对象的真实形象 [a eat]; */ return 0; }  

(责任编辑:admin)
织梦二维码生成器
------分隔线----------------------------
栏目列表
推荐内容