oc-20-多态

/**
 为什么父类可以访问子类继承自父类的方法,但是无法访问子类独有的方法?
 1.编译器编译时:
   编译器在编译时,只检查指针变量的类型,确定该指针变量类型里面有下面调用的方法,如果有该方法,编译器就认为,是正确,可以编译通过.
 
 2.运行时:会动态监测对象的真实类型.然后,调用对象自己的方法.
 父类指针指向子类对象的这种形式,叫做多态.
 当父类想要访问子类特有的方法时:强制类型转换.
 */
#import <Foundation/Foundation.h>
#import "Cat.h"
#import "Girl.h"
#import "Dog.h"
#import "Mouse.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Animal *c = [Cat new];
        [(Cat *)c jump];
        
        Animal *a = [Animal new];//错误
        [(Cat *)a jump];

    }
    return 0;
}

// 多态的应用
void test1()
{
// 父类指针指向子类对象,编译的时候是左边Animal类型运行的时候是右边Cat类型。
        Animal *c1 = [Cat new];

// 1.父类能否调用子类继承自父类的方法
        [c1 eat];
    
// 2.父类能否调用子类独有的方法,强制类型转换.
//        [c1 jump];
}
原文地址:https://www.cnblogs.com/yaowen/p/5310652.html