A.对象的多种形态
1.父类指针指向子类对象
2.调用方法的时候,会动态监测真实地对象的方法
3.没有继承,就没有多态
4.好处:用一个父类指针可以指向不同的子类对象
5.强制转换类型之后就能使用子类特有的方法,否则会出现warning(仍可以正常运行,即不论指针类型,只要对象存在实际方法就可以运行)
1
2 #import <Foundation/Foundation.h>
3
4 @interface Animal : NSObject
5 - (void) eat;
6 @end
7
8 @interface Dog : Animal
9 - (void) run;
10 @end
11
12 @interface Cat : Animal
13
14 @end
15
16
17 @implementation Animal
18 - (void) eat
19 {
20 NSLog(@"吃东西---");
21 }
22
23 @end
24
25 @implementation Dog
26 - (void) eat
27 {
28 NSLog(@"狗狗吃东西");
29 }
30
31 - (void) run
32 {
33 NSLog(@"狗狗跑起来了");
34 }
35 @end
36
37 @implementation Cat
38
39 - (void) eat
40 {
41 NSLog(@"猫猫吃东西");
42 }
43
44 @end
45
46 void feed(Animal *animal)
47 {
48 NSLog(@"开始喂动物");
49 [animal eat];
50 }
51
52
53 int main()
54 {
55 Animal *a = [Dog new];
56 [a eat];
57 Animal *c = [Cat new];
58 [c eat];
59
60 feed(a);
61 feed(c);
62
63 Dog *dog = (Dog *)a;
64 [dog run];
65
66 return 0;
67 }
