object-c学习:协议protocol

原创 2012年03月21日 14:09:33

 @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;
}

Object-C 学习笔记(二十二)--- 协议Protocol

协议:相当于其他面相对象语言中得抽象类(@optional)或者是接口(@required),弥补面相对象多继承. 于接口的区别:java  C# C++中的接口或抽象类可以通过子类实例化对象,进行向...

Object-C中的代理协议Protocol

在OC中的代理协议Protocol和java中的接口有点像,在java中一个类如果实现一个接口,那么该类必须实现该接口中的方法,而在OC中,类似接口的功能是有代理协议Protocol来实现的,协议中定...

Object-C之Protocol协议解析

例如要实现这个题目; 1)创建一个Baomu协议 2)创建一个woman类 woman.h文件 #import #import "Baomu.h" @interf...

IOS开发基础Object-C(13)—— protocol协议

今天,来给大家讲解一下OC中@protocol的用法,什么是protocol呢?从字面的意思上来说是协议的意思,那么到底什么是协议呢?那我们来普及一下协议的概念。 协议的概念 (1)协议相当于没有...

【Object-C】协议 @protocol

作用类似于接口。用于多个类应该遵守的方法。 协议定义的时多个类共同的公共行为规范,这些行为是于外部交流的通道,这就意味着协议里通常是定义一组公用方法,但不会为这些方法提供具体实现,方法的实现交给类去实...

Object-C中的协议Protocol

在写java的时候都会有接口interface这个概念,接口就是一堆方法的声明没有实现,而在OC里面,Interface是一个 类的头文件的声明,并不是真正意义上的接口的意思,在OC中,接口是由一个...

Object-C中的协议Protocol

在写java的时候都会有接口interface这个概念,接口就是一堆方法的声明没有实现,而在OC里面,Interface是一个 类的头文件的声明,并不是真正意义上的接口的意思,在OC中,接口是由...

关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol&nbsp

转自: 作者:舍得333 主页:http://blog.sina.com.cn/u/1509658847 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明,...

黑马程序员——零基础学习iOS开发——12 Object-C block、protocol

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、block 1.block简介 block是一种数据类型。 ...

Protocol Buffers for Object-C

一、先点击链接去了解一下,或者 google一下 http://code.google.com/intl/zh-CN/apis/protocolbuffers/ 二、protobuf的使用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:object-c学习:协议protocol
举报原因:
原因补充:

(最多只允许输入30个字)