本帖最后由 LeeWong 于 2014-10-20 21:31 编辑
- /*
- 测试
- Animal *a = [Dog new];
- [a eat];
- 究竟是调用父类animal的方法还是dog子类的方法,调用一个父类不存在,而子类新加的方法时从哪里调用
- 结果:
- 无论是run方法还是eat方法都是调用的cat中的
- 老师讲的说:对于a 本质上是一个cat类型的 但是编译器认为他是一个 animal类型的
- !!!!!!!
- 我的问题是:在执行 run和eat方法时 编译器应该是先去animal中查找有无此方法(编译链接中的警告证明),那么对于animal中存在的eat方法、不存在的run方法 这其中的调用是一个怎么样的过程呢? 父类中有的为什么要去子类调用?父类中没有的有怎么去父类中调用(步骤)?
- */
- #import <Foundation/Foundation.h>
- @interface Animal : NSObject
- {
- int age;//年龄
- }
- //吃东西
- - (void)eat;
- @end
- @implementation Animal
- - (void)eat
- {
- NSLog(@"animal 正在吃东西");
- }
- @end
- @interface Cat : Animal
- - (void)eat;
- - (void)run;
- @end
- @implementation Cat
- - (void)eat
- {
- NSLog(@"cat 正在吃东西");
- }
- - (void)run
- {
- NSLog(@"cat 跑了几步");
- }
- @end
- int main()
- {
- Animal *a = [Cat new];
- [a run];
- [a eat];
-
- }
复制代码
|