您的位置:首页 > 移动开发 > Objective-C

object-c学习:协议protocol

2014-04-25 10:57 253 查看
@interface 相当于是Object-C 的类的原型,与JAVA 中的接口意义是不同的,Object-C

中的 @protocol 才是和JAVA 中的接口等价的东西。例如:Object-C 的继承也是单继承,只

允许有一个父类,但是@protocol 是允许多继承的(按照Object-C 的说法叫做某类遵从了协

议A、协议B,而不是继承),这些都与JAVA 的接口一致。java中的interface可以有很多,没有固定的限制。

Printing.h

@protocol Printing1

-(void) print1;

@end

@protocol Printing2

-(void) print2;

@end

@protocol Printing3 <Printing2>

-(void) print3;

@end

Printing3 <Printing2>的意思是Printing3 遵从(继承)Printing2,<>是遵从@protocol 协议的语

法。

Fraction.h

#import <Foundation/Foundation.h>

#import "Printing.h"

@interface Fraction: NSObject <Printing1,Printing3>{

int numerator;

int denominator;

}

-(Fraction*) initWithNumerator: (int) n denominator: (int) d;

-(void) setNumerator: (int) n;

-(void) setDenominator: (int) d;

-(int) numerator;

-(int) denominator;

@end

Fraction.m

#import "Fraction.h"

@implementation Fraction

-(Fraction*) initWithNumerator: (int) n denominator: (int) d{

self=[super init];

if(self){

[self setNumerator: n];

[self setDenominator: d];

}

}

-(void) setNumerator: (int) n{

numerator=n;

}

-(void) setDenominator: (int) d{

denominator=d;

}

-(int) numerator{

return numerator;

}

-(int) denominator{

return denominator;

}

-(void) print1{

printf("1:%d/%d\n",numerator,denominator);

}

-(void) print2{

printf("2:%d/%d\n",numerator,denominator);

}

-(void) print3{

printf("3:%d/%d\n",numerator,denominator);

}

@end

 

main.m

#import "Fraction.h"

int main (int argc , const char *argv[]){

Fraction *frac=[[Fraction alloc] initWithNumerator: 3 denominator: 5];

<Printing1> p1=frac;//使用protocol 类型,相当于JAVA 中使用接口类型作为对象

的引用List list=ArrayList 的实例。

//也可以写作 id <Printing1> p1=frac;

[p1 print1];

id<Printing1,Printing2,Printing3> p2=frac;

//从这里可以看出id 是一个泛型对象,在id 后面使用<>作为泛型参数可以明确的

告诉别人你想把id 当作哪些种协议去使用,当然你可以不写泛型参数。

[p2 print2];

[p2 print3];

//-(BOOL) conformsToProtocol: (Protocol*) prot 用于判断对象是否遵从某

个protocol。

if([frac conformsToProtocol: @protocol(Printing1)]

&&[frac conformsToProtocol: @protocol(Printing2)]

&&[frac conformsToProtocol: @protocol(Printing3)]){

printf("YES");

}else{

printf("NO");

}

[frac release];

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: