pragma mark 协议基本概念
pragma mark 概念
/**
1.protocol基本概念
> Protocol 叫做"协议"
>Protocol作用
用来声明一些方法
也就是说,一个Protocol是有一系列的方法声明组成的
2.protocol 语法格式
> Protocol的定义
@protocol 协议名称
// 方法声明列表
@end
> 类遵循协议
一个类 可以遵守1个或者多个协议
任何类 只要遵守了Protocol, 就相当于拥有了 Protocol的所有方法声明
@interface 类名 : 父类 <协议名称>
@end
3.protocol和继承的区别
继承之后 默认就有了实现, 而protocol只和声明没有实现
相同类型的类 可以使用 继承, 但是不同的类型只能使用protocol
protocol 可以用于 存储方法的声明, 可以将多个类中共同的方法抽取出来,以后这些开发遵守协议即可
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#import "Student.h"
#import "Teacher.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
Person *p = [[Person alloc]init];
[p playFootball];
[p playBasketBall];
[p playBaseBall];
Student *s = [[Student alloc]init];
[s playFootball];
Teacher *t = [[Teacher alloc]init];
[t playFootball];
return 0;
}
Person.h //人类
#import <Foundation/Foundation.h>
#import "SportProtocol.h"
@interface Person : NSObject <SportProtocol>
//- (void)playFootball;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)playFootball
{
NSLog(@"%s",__func__);
}
-(void)playBaseBall
{
NSLog(@"%s",__func__);
}
-(void)playBasketBall
{
NSLog(@"%s",__func__);
}
@end
Student.h //学生类
#import <Foundation/Foundation.h>
#import "SportProtocol.h"
@interface Person : NSObject <SportProtocol>
//- (void)playFootball;
@end
Student.m
@implementation Student
- (void)playFootball
{
NSLog(@"s %s",__func__);
}
-(void)playBaseBall
{
NSLog(@"s %s",__func__);
}
-(void)playBasketBall
{
NSLog(@"s %s",__func__);
}
@end
Teacher.h // 教师类
#import <Foundation/Foundation.h>
#import "SportProtocol.h"
@interface Teacher : NSObject <SportProtocol>
@end
Teacher.m
#import "Teacher.h"
@implementation Teacher
- (void)playFootball
{
NSLog(@"t %s",__func__);
}
-(void)playBaseBall
{
NSLog(@"t %s",__func__);
}
-(void)playBasketBall
{
NSLog(@"t %s",__func__);
}
@end
Dog.h //狗类
#import <Foundation/Foundation.h>
#import "SportProtocol.h"
@interface Dog : NSObject<SportProtocol>
@end
Dog.m
#import "Dog.h"
@implementation Dog
- (void)playFootball
{
NSLog(@"d %s",__func__);
}
-(void)playBaseBall
{
NSLog(@"d %s",__func__);
}
-(void)playBasketBall
{
NSLog(@"d %s",__func__);
}
@end