判断标准 协议只是定义空方法 继承有默认实现方法
// 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