大家一定都知道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];
}