首页 > 其他 > 详细

OC3-父类指针指向子类对象

时间:2015-06-17 14:54:26      阅读:119      评论:0      收藏:0      [点我收藏+]
//
//  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;
}

 

OC3-父类指针指向子类对象

原文:http://www.cnblogs.com/0515offer/p/4582999.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!