黑马程序员学习笔记_OC之多态

黑马程序员学习笔记_OC之多态

1、 多态实质:父类指针指向子类对象,没有继承就没有多态

2、 实例:例如设计一个animal类,包括方法eat,输出“animal eat---”。再设计一个dog类继承animal,重写eat方法,输出“dog eat-----”。可以采用如下代码实现对dog对象的调用。

Animal *a = [Dognew];

[a eat] ;

这样的话,输出的即为dog eat-----,说明调用的是dog的方法。原因是执行时会动态检测指针的真实类型。

3、 好处:在2的基础上再设计一个类cat继承animal,重写eat方法,输出“cat eat----”,再设计一个函数feed函数如下:

void feed (dog*d)

{

        [d eat];

}

这个函数可以执行dog吃的动作,但是不能执行cat吃东西的动作,如果想在主函数中调用让cat吃东西的话,还要设计一个函数如下:

void feed2 (cat*c)

{

        [c eat];

}

这样在主函数中写入如下代码:

Dog *dd = [Dognew];

Cat *cc = [Catnew];

feed(dd);

feed(cc);

这样才能成功调用猫和狗的吃。

使用多态可以节省上述编法代码,实例如下:

4、多态局限性:如果上述例子的狗类中多加一个对象方法run,执行如下代码:

Animal *a = [Dognew];

[a run];

执行上述代码时发现有警告但能运行,我们规定不能这样写。这是多态的局限性:父类类型的指针不能用来调用子类的特有方法。如果实在想调用可以用强制转换的方法实现,代码如下:

Animal *a = [Dognew];

Dog *d = [Dog *]a;

[d run];

即必须转化为子类类型指针变量。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值