您的位置:首页 > 其它

oc-20-多态

2016-03-23 13:01 309 查看
/**
为什么父类可以访问子类继承自父类的方法,但是无法访问子类独有的方法?
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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: