• 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



  • 相关阅读:
    Vue项目中使用Vue-Quill-Editor富文本编辑器插件
    Element-UI中的Cascader 级联选择器高度以及位置问题
    Sublime中同一个文件进行分屏显示
    Oracle的clob数据类型
    查看Nginx版本号的几种方式
    华为路由器EasyNAT&NAT Server
    huawei路由器NAT配置
    15
    14
    13
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7218566.html
Copyright © 2020-2023  润新知