Objective-c中@interface、@implementation、@protocal

转载 2016年05月30日 15:49:42

以下Objective-c简称OC

从事Java开发的程序员们都知道,在java中interface是接口的意思,java中类是用class声明,接口用interface声明,是两个独立的部分,只有在类声明要实现某个接口时,他们两者才建立了关系,例如:

  1. interface AI{  
  2.     void print();  
  3. };  
  4. class AC{  
  5. };  

这时候,AI和AC是独立存在,AC不会因为没有和AI建立关系而编译错误,将AC做以下修改后,AI才和AC建立了关系,AC必须实现AI中声明的方法才能通过编译。

  1. class AC implement AI{  
  2.     void print(){  
  3.         system.out.println('Hello World');  
  4.     }  
  5. };  

现在,我们来看Objective-c,网上大家都将oc中的interface理解为“非正式协议(或说接口)”,prototal理解为“正式协议(或说接口)”,我觉得那样理解起来虽然不困难,但是很变扭,于是我做一点自己的理解:
1、protocal就相当于java中的interface;
2、而interface和implementation共同代表一个类,两者的组合相当于java中的class,即oc中的类必须包括两部分,interface部分和implementation部分,这才是oc中的一个类的完整声明;然后OC中将成员变量和成员方法的声明部分放置在interface部分中,包括继承关系,protocal实现关系,都在interface里面的头部进行声明,然后将实现部分放置在implementation部分中,相当于是将类拆分成声明和实现两部分,这两部分缺一不可,所以在OC中,不妨不要将interface叫做接口,直接叫做类声明部分来得容易理解多了,简而言之,oc中interface是类的一个部分,和implementation共同组成一个完整的类。

泛型


OC中的类型id,它可以认为是一种特殊的指针:可以指向任何类型的对象。id 再加上protocal(即oc中的接口),能够达到类似java中泛型的效果

  1. #import <Foundation/Foundation.h>  
  2.   
  3.   
  4. @protocol A  
  5. @end  
  6.   
  7.   
  8. <strong style="color:white;background-color:#880000">@interface</strong> A : NSObject<A>  
  9. -(void) test:(id<A>) obj;  
  10. @end  

注意这里的 -(void) test:(id<A>) obj; 这表明test方法接受一个任意类型的对象做为参数,但是该参数对象必须实现接口A,类似于java中的

void test(List<A> obj) 。

Objective-c中@interface、@implementation、@protocal

以下Objective-c简称OC 从事java开发的程序员们都知道,在java中interface是接口的意思,java中类是用class声明,接口用interface声明,是两个独立的部分,只有...
  • qq_17714921
  • qq_17714921
  • 2014年08月03日 21:51
  • 246

Objective-c中@interface、@implementation、@protocal、id

@property和@synthesize是成对出现的。  其中@property与@protocal不同。 转自:http://blog.csdn.net/l271640625/a...
  • Songjs19931206
  • Songjs19931206
  • 2015年03月27日 11:39
  • 336

Objective-c学习之路:#import跟@class的区别,implementation和interface中声明变量的区别等等

在网上找了些资料关于
  • wuyueishan
  • wuyueishan
  • 2014年10月25日 00:55
  • 574

【object-c基础】@interface,@implementation

原文:http://blog.csdn.net/qiaoshe/article/details/6893253 1.@interface 在java等语言编程中,创建类都是用class,但在o...
  • hudashi
  • hudashi
  • 2016年06月29日 16:09
  • 333

OC中@interface、@implementation、@protocal

Java中的interface和implementation从事java开发的程序员们都知道,在java中interface是接口的意思,java中类是用class声明,接口用interface声明,...
  • mccand1234
  • mccand1234
  • 2016年08月22日 17:19
  • 617

实例变量 定义在 @interface 和 @implementation 有何区别?

http://www.iteye.com/problems/97859 Objective-C程序设计第2版  实例变量定义在 @interface 下  @interface He...
  • jeffasd
  • jeffasd
  • 2016年05月06日 11:40
  • 1517

Objective-C 学习四 Protocal 与 Category

protocal 协议: 协议事实上是一组方法列表,不依特定的类。使用协议可以使不同的类共享相同的消息。 协议的定义: @protocal  协议名 方法声明;            ...
  • u010715440
  • u010715440
  • 2015年04月29日 09:18
  • 369

【object-c基础】Object-c基础之三:面对对象开发@interface,@implementation

1.@interface 在java等语言编程中,创建类都是用class,但在object-c中,用@interface。 例子: @interface circle :NSObject    ...
  • qiaoshe
  • qiaoshe
  • 2011年10月21日 10:59
  • 15787

iOS开发中@interface 和 @implementation区别, @property 和@synthesize区别

1.  @interface 和 @implementation  OC中的类必须包括两部分,interface部分和implementation部分,这才是oc中的一个类的完整声明; ...
  • Zhai19931004
  • Zhai19931004
  • 2016年05月04日 17:30
  • 2034

ios中的成员变量定义在@interface 和@implementation 中的区别是什么?

我猜你说的定义在@interface中是指定义在头文件里, 定义在@implementation中是指在实现文件中的类扩展(Class Extensions), 一般来说把要公开的信息(变量,属性,方...
  • m372897500
  • m372897500
  • 2016年05月30日 15:51
  • 1182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Objective-c中@interface、@implementation、@protocal
举报原因:
原因补充:

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