博客来源:http://blog.csdn.net/zhangao0086/article/details/6675436
面向对象的设计中,有一个特性封装性,就是将某些东西包装和隐藏起来,让外界无法直接使用,只能通过某些特定的方式才能访问。
在Objective-C中也可以做到这一点。
比如下面这个类:
先是接口:
// ===========================
// = File: SomeClass.h
// = Interface for SomeClass
// ===========================
@interface SomeClass : NSObject
-(void) msg;
+(void) classMsg;
@end
很简单的接口,再是它的实现和类别:
// ===========================
// = File: SomeClass.m
// ===========================
#import "SomeClass.h"
// =================================
// = Interface for hidden methods
// =================================
@interface SomeClass (hidden)
+(void) hiddenClassMethod;
-(void) hiddenInstanceMethod;
@end
// =====================================
// = Implementation of hidden methods
// =====================================
@implementation SomeClass (hidden)
+(void) hiddenClassMethod
{
printf( "Hidden class method.\n" );
}
-(void) hiddenInstanceMethod
{
printf( "Hidden instance method\n" );
}
@end
// ================================
// = Implementation for SomeClass
// ================================
@implementation SomeClass
-(void) msg
{
printf("Inside msg()...\n");
[self hiddenInstanceMethod];
[SomeClass hiddenClassMethod];
}
+(void) classMsg
{
printf("Inside classMsg()...\n");
}
@end
有一个hidden的类别,在SomeClass的实现中调用了hidden的两个方法。
只包含SomeClass.h文件的main:
//
// main.m
// Private Method
//
// Created by mac on 11-8-10.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "SomeClass.h"
int main (int argc, const char * argv[])
{
SomeClass *ptr = [[SomeClass alloc] init];
// Display message (including messages from hidden methods)
[ptr msg];
// Call a class method
[SomeClass classMsg];
// Compile warning (can't access hidden instance method)
// [ptr hiddenInstanceMethod];
// Compile warning (can't access hidden class method)
// [SomeClass hiddenClassMethod];
[ptr release];
return 0;
}
运行成功后应该可看到如下的显示:
Inside msg()...
Hidden instance method
Hidden class method.
Inside classMsg()...
内部调用hidden的两个方法是没问题的。在main的return之前有四行注释,把其中两行发送消息的注释取消,再编译后可能会遇到两种情况:
1.有警告,但是编译成功,直接运行后可以得到如下结果:
Inside msg()...
Hidden instance method
Hidden class method.
Inside classMsg()...
Hidden instance method
Hidden class method.
方法确实隐藏的(从警告中可以得知),但是可以连接到。
2.编译失败,Xcode4.2版本的编译器好像默认是Apple LLVM compiler 3.0,需要切换成LLVM GCC 4.2才能编译成功,编译成功后运行可以得到上述结果。
分享到:
相关推荐
protected://与私有成员性质相似,唯一的差异表现在派生类中 int Goodnum; //定义货物编号 int Innum; //定义库存 float Buyp; //定义进价 float Sellp; //定义卖价 public: virtual void Set_Goodnum(int num)...
NTT DoCoMo, Inc. 日本多科莫电信 SOFTBANK MOBILE Corp. 日本软银移动 Sprint Nextel( 美国 ) T-Mobile( 德国 ) Telecom Italia( 意大利 ) Telef ó nica( 西班牙 ) Vodafone 沃达丰电信 China Unicom 中国联通 ...
封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的...
“在库中的对应命令名”请务必准确填写静态库中公开导出的符号名称(C函数(cdecl)编译后,符号名称通常是在函数名称前加下划线(_));“在库中的对应命令名”以@开头表示以cdecl方式调用,否则表示以默认的stdcall...
函数式接口中被实现方法的全部参数传给该类方法作为参数。 (a,b,...) -> 类名.类方法(a,b, ...) 引用特定对象的实例方法 特定对象::实例方法 函数式接口中被实现方法的全部参数传给该方法作为参数。 (a,b, ...)...
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,...
invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名...
在一个C++程序中,main函数的位置( c )。 (a) 必须在程序的开头 (b) 必须在程序的后面 ( c ) 可以在程序的任何地方 (d) 必须在其它函数中间 2.用C++语言编制的源程序要变为目标程序必须要经过( d )。 (a) ...
如果出现在方法体中,则上述代码会反映到Java栈的本地变量表中,作为 reference类型数 据出现。 new Object( 反映到Java堆中,形成一块存储了 bject类型所有对象实例数据值的内存。Java堆中还包 含对象类型数据的地址...
abstract和non-static的 17 接口可以声明成final 18 内部类可以访问外层类的任何变量,包括私有的 19 匿名类可以有构造器,声明时候不能带参数 20 抽象方法可以是static的。 21 构造器没有任何返回类型...
18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...