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;

}

 

你可能感兴趣的:(对象)