判断标准 协议只是定义空方法 继承有默认实现方法
// main.m // 多态 #import <Foundation/Foundation.h> #import "Animal.h" #import "Cat.h" #import "Tiger.h" #import "Person.h" /*多态 //1.一种方法有多种不同的实现 //例如 Animal run-> 猫 狗 乌龟 //2.方法的动态绑定(runtime运行期)调用哪个对象的哪个方法 3.向上类型转换 upcasting */ int main(int argc, const char * argv[]) { @autoreleasepool { Cat *c = [[Cat alloc]init]; Tiger *t = [[Tiger alloc]init]; Person *p = [[Person alloc]init]; [p care:t]; } return 0; }
// // Animal.h #import <Foundation/Foundation.h> @interface Animal : NSObject -(void)run; @end // // Animal.m #import "Animal.h" @implementation Animal -(void)run{ NSLog(@"动物跑..."); } @end
// Cat.h #import <Foundation/Foundation.h> #import "Animal.h" @interface Cat : Animal @end // // Cat.m #import "Cat.h" @implementation Cat -(void)run{ NSLog(@"猫步.."); } @end
// // Tiger.h #import <Foundation/Foundation.h> #import "Animal.h" @interface Tiger : Animal @end // // Tiger.m #import "Tiger.h" @implementation Tiger -(void)run{ NSLog(@"老虎跑。。"); } @end
// // Person.h #import <Foundation/Foundation.h> #import "Animal.h" @interface Person : NSObject -(void)care:(Animal*)a; //OCP 开闭原则 扩展是开放的 修改是关闭的 /* -(void)careCat:(Cat*)c; -(void)careTiger:(Tiger*)t; */ @end // // Person.m // 多态 #import "Person.h" @implementation Person -(void)care:(Animal*)a{ /* 这地方实现了 1.多态性 2.向上类型转换 3.方法动态绑定 */ [a run]; } @end
原文:http://www.cnblogs.com/WJR12/p/5042670.html