OC中的面向对象三大特性之三

三、多态
多态是指对象的多种形态,主要是在类的继承时体现,可以说没有继承就不存在多态这个概念。

1.        多态的基本使用。这里有两个类,父类是Animal,子类是Dog。 “Animal *a = [Dog new];”这一句是把父类Animal的指针指向Dog类,对象a的本质还是Dog,所以用a来调用eat方法是调用Dog类的eat方法。

#import <Foundation/Foundation>

@interface Animal:NSObject
-(void)eat;
@end

@implementation Animal
-(void)eat
{
NSLog(@"吃东西----");
}
@end

@interace Dog:Animal
-(void)eat;
@end

@implementation Dog
-(void)eat
{
NSLog(@"Dog-吃东西----");
}
@end
int main()
{
//多种形态
Dog *d = [Dog new];//Dog类型

//多态:父类指针指向子类对象
Animal *a = [Dog new];

[a eat];//此时a对象的真实类型实际上是Dog类的对象,所以a调用的是Dog
        //类的eat方法

NSObject *n = [Dog new];//也是多态

return 0;
}
    
2.        OC中使用多态的注意事项。
Objective-C是弱类型语法,OC的编译器的容错能力很强,一些不合逻辑的语法或错的很离谱的语法在OC编译器编译时不会报错而只会警告。比如:
(1)        把子类的指针指向一个父类的对象;
例如:Dog  *p = [Animal new];
(2)        把一个毫不相关的指针指向一个对象。
例如:NSString *s = [Dog new]。
上边这两种情况在其他的编译器会报错。

总结就是对象在实例化时等号左边的类无论是什么类型,OC的编译器都不会报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值