多态的条件: 有继承关系, 有方法重写 , 父类的声明变量指向 之类对象.
// 代码体现: 用父类类型的指针指向 子类对象, 多态.
Animal * animal = [[Dog alloc] init];
struct Animal {
char name[20];
int age;
void (*function)(int, int);
};
struct Dog {
char name[20];
int age;
void (*function)(int, int);
};
//猜测多态底层是用C实现的吧, 应该是用的 C的结构体吧,等号两边想要赋值其占用空间必须一致, 继承关系表示 Animal & Dog 结构体大小一样,至于父类之所以能调用子类的方法, 结构体只需要存储函数指针,只需8个字节,改写父类方法就是改写方法体,在代码区. 至于要解释 子类多出来的成员 & 方法为什么不能访问的问题...父类的结构体大小只有 sizeof(Animal) 这么大, 用父类指针访问子类对象的时候 只能偏移 sizeof(Animal)的大小的量.因此父类无法访问子类多出来的方法 一切都是猜测...( ⊙ o ⊙ )