oc-20-多态

时间:2022-08-12 01:20:45
/**
为什么父类可以访问子类继承自父类的方法,但是无法访问子类独有的方法?
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 ;
} // 多态的应用
void test1()
{
// 父类指针指向子类对象,编译的时候是左边Animal类型运行的时候是右边Cat类型。
Animal *c1 = [Cat new]; // 1.父类能否调用子类继承自父类的方法
[c1 eat]; // 2.父类能否调用子类独有的方法,强制类型转换.
// [c1 jump];
}