关于多态的问题

大家一定都知道OC 的三大特性就是:封装.继承.多态.

前面两个自然不用多说,封装就是不把程序暴露在外面,只提供相应的借口提供访问,相应的 setter.getter 方法,还有属性的作用域问题,以及延展也就是私有方法

继承就是子类可以继承父类的一些方法和属性,并且可以重写这些方法但是会覆盖父类原来的方法. OC 是单继承的一个子类只能继承自一个父类,且大多数的 OC 类都是继承自 NSObject 类的.

下面就来说说多态吧,简单的说,一个接口,多个实现就是多态,也可以说父类类型的指针指向子类对象

使用多态时会进行动态检测,调用真实的对象方法

那么详细点来说到底是什么意思呢?

首先多态的继承必须要有继承,举个例子说明一下

NSObject: Animal: Dog

animal 的方法

- (void)eat

{

NSLog(@"动物吃东西")

}

dog 的方法

- (void)run

{

NSLog(@"狗 跑了")

}

- (void)eat

{

NSLog(@''狗吃东西")

}

Animal *a = [Dog alloc]init];

[a eat];

[a run];这种写法是错误的,因为 animal 类中没有 run 方法只有 dog 类有 解决办法就是强制转换


局限性: 父类指针变量不能直接调用子类特有的方法


好处: 如果方法参数中使用的是父类类型,则可以传入父类和子类对象,不用再去定义多个方法来和相应的类进行匹配

如: Person 类有个喂动物的方法

- (void)feed:(Animal *)dog

{

    [dog eat];

}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值