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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 05:59:34

ios开发动物园管理 继承多态的实现的相关文章

iOS开发-内存管理

内存管理 对于这篇呢,其实现在都是ARC模式,正常状态下基本不用我们去手动释放内存,所以如果不是要面试呀.装逼或者扎实功底的,就先别看了或者了解下即可,因为像面试时,有些面试官想看你的基础时,就有些人会问,现在工作基本不会用到. 学习目标 1. 掌握内存管理的原理 2. 掌握手动内存管理 =============================================== 1.需要理解的知识 1.1内存管理 1.1.1 C的内存管理,以及麻烦之处 char *p = (char *)m

iOS开发OC基础:OC的内存管理

OC内存管理的基础知识 /** //             *  当对一个对象autorelease时,会将该对象放到离它最近的自动释放池,当自动释放池将要销毁时,会对自动释放池中的对象发送release消息,让对象的引用计数减1,(切记,是将对象的引用计数减1,而不是回收空间.) //             */ /** *  如果相对一个对象做copy操作,就必须让该类服从NSCopying协议,并且实现协议中的- (id)copyWithZone:(NSZone *)zone方法 */

[转载]对iOS开发中内存管理的一点总结与理解

对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作的理解是衡量一个程序员成熟与否的一个标准.好了,闲话不说,下面进入正题. 众所周知,ObjectiveC的内存管理引用的一种叫做“引用计数“ (Reference Count)的操作方式,简单的理解就是系统为每一个创建出来的对象,(这里要注意,只是对象,NSObject的子类,基本类型没有‘引用计数’)

iOS开发ARC内存管理技术要点

本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging 技术交流新QQ群:41

IOS开发中Xcode常用插件安装与管理(转)

XCode中插件管理工具:Alcatraz   转自http://blog.csdn.net/liwei3gjob/article/details/44266943 1.全能搜索家CodePilot 2.0 你要找的是文件?是文件夹?是代码?Never Mind,CMD+SHIFT+X调出CodePilot,输入任何你想到搜的东西吧!想搜appFinishLaunchingWithOptions?忘记咋拼了?没关系强大的代码搜索能力,appflaun一样也可以找到!超级强大的正则匹配,匹配任何你

iOS开发——修改指定文件的内存管理状态

今天项目要上线,在Archive时报错:  ARC forbids explicit message send of 'release' 'release' is unavailable: not available in automatic reference counting mode   项目中有几个第三方库用到MRC,在release时报错.在运行时没有用到这个库所以没有报错(没有确定).于是我改了那几个文件为MRC状态,成功Archive,在ARC改为-fobjc-arc,MRC为-f

iOS开发中的ARC内存管理de技术要点

本文旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时

【iOS开发-116】内存测试管理和优化:Analyze和Profile,以及iOS开发常用工具simPholders、fabric

(1)关于Analyze和Profile的使用和介绍 --使用,长按左上角的Run,会出现Analyze和Profile两个选项.Analyze是静态内存分析,如果有潜在的内容泄露问题会出现蓝色的标记.Profile是动态内存分析,这个比较详细一点,可以看到程序的每个模块占用多少内存等等. 推荐的博客: IPhone开发工具篇-利用xcode profile和analyze进行性能优化 备注:自从有了ARC,内存泄露问题大大减少了,但不代表没有.对内存有疑问或者对于老项目从非ARC转ARC有困难

(转)iOS开发ARC内存管理技术要点

转自:http://www.cnblogs.com/flyFreeZn/p/4264220.html 本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 A