Objective-C: 多态

1.多态

1.一个对外接口,多个对内实现
void test1()
{
    CZAnimal *a=[[CZDog alloc]initWithName:@"额" andAge:3];
    [a eat]; //父类的指针调用子类用重写的方法
    [a sleep];
    // [a watchHome] 父类的指针不能调用子类中派生的方法
    a=[[CZCat alloc]initWithName:@"老咪" andAge:3];
    [a eat];
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        test1();

    }
    return 0;
}
2.在OC程序中,体现为父类的指针可以指向子类的对象,从而调用子类中重写的父类的方法
3.使用形式
    3.1 函数参数多态
void show(CZAnimal *a)
{
    [a eat];
}

void test2()
{
    CZDog* dog=[[CZDog alloc]initWithName:@"小黑" andAge:3];
    show(dog);
    CZCat* cat=[[CZCat alloc]initWithName:@"老咪" andAge:4];
    show(cat);
}
    3.2 数组多态.
void test3()
{
    CZAnimal* a[3];
    a[0]=[[CZAnimal alloc]initWithName:@"无名" andAge:0];
    a[1]=[[CZDog alloc]initWithName:@"小黑子" andAge:3];
    a[2]=[[CZCat alloc]initWithName:@"老咪" andAge:2];
    for(int i=0;i<3;i++)
    {
        [a[i] eat];
    }
}
    3.3 返回值多态
typedef enum
{
    ANIMAL,
    DOG,
    CAT
}Type;

CZAnimal* get(Type type)
{
    switch (type) {
        case ANIMAL:
            return [[CZAnimal alloc]initWithName:@"无名" andAge:0];
            break;
        case DOG:
            return [[CZDog alloc]initWithName:@"小黑子" andAge:3];
            break;
        case CAT:
            return [[CZCat alloc ]initWithName:@"老咪" andAge:2];

        default:
            break;
    }
}

void test4()
{
    [get(DOG) eat];
    [get(CAT) eat];
}

动物管理员

#import <Foundation/Foundation.h>
#import "CZFeeder.h"
#import "CZMeat.h"
#import "CZTiger.h"
#import "CZSheep.h"
#import "CZGrass.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        CZFeeder* feeder=[[CZFeeder alloc]init];
        CZTiger* tiger=[[CZTiger alloc]initWithName:@"跳跳虎"];
        CZMeat* meat=[[CZMeat alloc]initWithName:@"羊肉"];

        [feeder feedForAnimal:tiger withFood:meat];

        CZSheep* sheep=[[CZSheep alloc]initWithName:@"咩咩羊"];
        CZGrass* grass=[[CZGrass alloc]initWithName:@"马达加斯加香草"];

        [feeder feedForAnimal:sheep withFood:grass];

       }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值