多态:
封装,继承,多态是面向对象的三大特征。
那多态到底是什么呢?
多态:允许不同的类定义相同的方法,OC能自己判断当前类所对应的方法,不会混乱。
动态类型:程序直到运行时才确定对象的类型。
动态绑定:基于动态类型,程序直到运行时才能确定要执行的方法。
多态:父类的指针可以指向子类的对象。这句话一定要深刻理解,请看几行代码:
Animal * obj = [[Dog alloc] init];
[obj eat];
虽然该obj前面是Animal类,也就是说它被声明是Animal类的一个指针,但是在运行 [obj eat];这行时才知道它其实是Dog类型的,该obj指针实际上却是指向子类Dog的对象。也就说它在运行时,实际上调用的是Dog类里的那个eat方法。这就是多态。
OC中动态能力的原理:
OC中的每个对象默认都有一个属性,即isa指针。它指向了一个“类对象”(object-class),这个对象是在编译的时候由编译器生成的。它里面存储了类的信息,专门用来描述类。当程序运行时,它作为类的一个实例的属性,它会动态的告诉对象“你属于哪个类,你有什么方法等”。。。
多态可以提高代码的灵活性和复用度。
博客参考:点击进入