———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
使用多态的好处
如果函数\方法的参数是父类类型,那么父类、子类对象都可以传入。
1 #import <Foundation/Foundation.h> 2 //Animal类 3 @interface Animal : NSObject 4 - (void)eat; 5 @end 6 @implementation Animal 7 - (void)eat 8 { 9 NSLog(@"Animal---吃东西"); 10 } 11 @end 12 13 //Dog类 14 @interface Dog : Animal 15 - (void)run; 16 @end 17 @implementation Dog 18 - (void)run 19 { 20 NSLog(@"Dog---跑"); 21 } 22 - (void)eat 23 { 24 NSLog(@"Dog---吃"); 25 } 26 @end 27 28 //Cat类 29 @interface Cat : Animal 30 - (void)eat; 31 @end 32 @implementation Cat 33 - (void)eat 34 { 35 NSLog(@"Cat---吃"); 36 } 37 @end 38 39 //定义一个函数 喂动物 40 void feed(Animal *a) 41 { 42 [a eat]; 43 } 44 int main(int argc, const char * argv[]) 45 { 46 //函数参数为父类类型,父类和子类对象都可以传入 47 Animal *aa = [Animal new]; 48 feed(aa); 49 50 51 Dog *d = [Dog new]; 52 feed(d); 53 Cat *c = [Cat new]; 54 feed(c); 55 56 //父类对象不能直接调用子类方法,必须强转为子类类型才可以调用子类方法 57 Animal *animal1 = [Dog new]; 58 //父类对象不能直接调用子类方法 59 //[animal1 run] 60 Dog *a1 = (Dog *)animal1; 61 [a1 run]; 62 return 0; 63 }
局限性:
1>父类类型的变量 不能直接调用子类特有的方法
2>必须强转为子类类型变量后,才可以调用子类特有的方法
时间: 2024-10-07 04:11:53