OC3-父类指针指向子类对象
// // Cat.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "Animal.h" @interface Cat : Animal { float _height; } @property (assign,nonatomic)float height; @end // // Cat.m // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "Cat.h" @implementation Cat -(void)printAnimalFood { NSLog(@"cat like to eat fish"); } -(NSString *)description { return [NSString stringWithFormat:@"name=%@,age=%li,height=%.2f",_name,_age,_height]; } @end
// // Dog.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "Animal.h" @interface Dog : Animal { float _weight; } -(void)printAnimalHaHa; @property (assign,nonatomic) float weight; @end // // Dog.m // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "Dog.h" @implementation Dog -(void)printAnimalFood { NSLog(@"dog like to eat bone"); } //-(NSString *)description //{ // return [NSString stringWithFormat:@"name=%@,age=%li,weight=%.2f",_name,_age,_weight]; //} -(void)printAnimalHaHa { NSLog(@"HaHa"); } @end
// // Animal.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import <Foundation/Foundation.h> @interface Animal : NSObject { NSString *_name; NSInteger _age; } @property (copy,nonatomic)NSString *name; @property(assign,nonatomic)NSInteger age; -(void)printAnimalFood; @end // // Animal.m // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "Animal.h" @implementation Animal -(void)printAnimalFood { NSLog(@"-----Animal"); } -(NSString *)description { return [NSString stringWithFormat:@"name111=%@,age=%li",[self name],self.age]; } @end
// // main.m // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import <Foundation/Foundation.h> #import "Dog.h" #import "Cat.h" #import "Animal.h" void showAnimalFood(Animal *ani) { [ani printAnimalFood]; } int main(int argc, const char * argv[]) { @autoreleasepool { Dog *xiaohei =[[Dog alloc] init]; xiaohei.name=@"xiaogei"; xiaohei.age=12; xiaohei.weight=12.6; //[xiaohei description]; NSLog(@"%@",xiaohei); Cat *xiaomao =[[Cat alloc] init]; xiaomao.name=@"xiaomao"; xiaomao.age=12; xiaomao.height=12.6; //[xiaohei description]; NSLog(@"%@",xiaomao); //父类的对象指针可以指向子类的对象 //调用的方法看具体的对象类型,先从子类查找对应的方法实现,如果子类没有实现对应的方法,跳到父类查找对应的方法实现,如果父类没有实现对应的方法,再跳到父类的父类查找对应的方法实现. Animal *ani =xiaohei; [ani printAnimalFood]; ani=xiaomao; [ani printAnimalFood]; showAnimalFood(xiaomao); showAnimalFood(xiaohei); //根据传入的不同的对象,做出不同的响应.多态 } return 0; }