ios开发之-继承的实现运用

//
//  main.m
//  继承
//

//

#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Cat.h"
#import "Dog.h"
#import "FeedMan.h"

int main(int argc, const char * argv[])
{
    
//    Animal * animal = [Animal new];
//    
//    [animal eat];
//    
//    [animal sleep];
    
    
//    //忘记引入头文件
//    Animal * cat =[[Cat alloc]init];
//    
//    [cat eat];
    
    
//    Cat * cat = [[Cat alloc]init];
//    
//    [cat catchMouse];
//    
//    Dog * dog = [[Dog alloc]init];
//    
//    [dog bark];
//    
    
    
    //父类指针保存子类对象。如何调用子类对象的方法?
    
//    Animal * animal_cat = [[Cat alloc]init];
//    
//    FeedMan * man = [[FeedMan alloc]init];
//    
//    [man showName:animal_cat];
    
    //[animal_cat eat];
    
//    [animal_cat setName:@"Hello Cat"];
    
    Animal * animal_dog = [[Dog alloc]init];
    
    FeedMan * man = [[FeedMan alloc]init];
    
    [man showName:animal_dog];
    
    [man FeedAnimal:animal_dog];

    
    //子类调用父类的方法,如何实现方法的不同性?
    
    
    return 0;
}
//
//  FeedMan.h
//  继承
//



#import "Animal.h"

@interface FeedMan : NSObject

-(void)showName:(Animal *)animal;

-(void)FeedAnimal:(Animal *)animal;
@end

//
//  FeedMan.m
//  继承


#import "FeedMan.h"
#import "Dog.h"
#import "Cat.h"

@implementation FeedMan

-(void)FeedAnimal:(Animal *)animal
{
    if ([animal isKindOfClass:[Dog class]] ) {
        
        Dog * dog = (Dog *)animal;
        [dog eat];
    }
}

-(void)showName:(Animal *)animal
{
    //能够动态的检測动物的类型用到的一个类?
    if([animal isKindOfClass:[Dog class]])
    {
        //须要强制类型转换
        Dog * dog = (Dog *)animal;
        [dog bark];
    }
    else if ([animal isKindOfClass:[Cat class]])
    {
        Cat * cat = (Cat *)animal;
        [cat catchMouse];
    }
    
}

@end
//
//  Animal.h
//  继承


#import <Foundation/Foundation.h>


@interface Animal : NSObject
{
    NSString * _name;
    
    int _age;
}

@property NSString * name;
@property int age;

-(void)eat;

-(void)sleep;

-(void)showAge;


@end

//
//  Animal.m
//  继承
//


#import "Animal.h"

@implementation Animal

-(void)eat
{
    NSLog(@"动物吃东西");
}

-(void)sleep
{
    NSLog(@"动物睡觉了");
}


-(void)showAge
{
    NSLog(@"小动物的年龄");
}
@end

//
//  Dog.h
//  继承
//


#import "Animal.h"

@interface Dog : Animal
{
    
}

-(void)bark;
-(void)eat;

@end

//
//  Dog.m
//  继承
//

#import "Dog.h"

@implementation Dog

-(void)bark
{
    NSLog(@"小狗汪汪叫");
}
-(void)eat
{
    NSLog(@"小狗吃东西");
}

@end

//
//  Cat.h
//  继承


#import "Animal.h"

@interface Cat : Animal
{
    
}
-(void)catchMouse;

-(void)eat;
@end

//
//  Cat.m
//  继承
//

#import "Cat.h"

@implementation Cat
{
    
}

-(void)catchMouse
{
    NSLog(@"猫咪会捉老鼠!

"); } -(void)eat { NSLog(@"小猫吃小鱼"); } @end




原文地址:https://www.cnblogs.com/brucemengbm/p/7337247.html