黑马程序员——OC语言日志——私有变量和私有方法
来源:互联网 发布:linux内网ip映射到外网 编辑:程序博客网 时间:2024/06/07 06:21
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、OC中的私有变量
在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private的。在.m中定义的成员变量不能和它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。
声明一个类:
#import<Foundation/Foundation.h>@interface Person : NSObject{int _age;//默认是protect类型,能在当前类和子类中使用@privateNSString *_name//_name不能在子类中使用,但是可以被子类继承}-(void)run;-(void)eat;@end类的实现:
#import"Person.h"//在.m中定义实例变量//纯属私有变量,该变量只能在类中使用,不能被子类继承,也不能被子类使用int m=100;@implementation Person-(void)run{NSLog(@"人正在走,速度是%d",m);//可以访问m}-(void)eat{NSLog(@"m=%d",m);//可以访问m}main实现:
<pre name="code" class="cpp"><p><pre name="code" class="cpp">#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, constchar * argv[]) { @autoreleasepool { Person *per=[Person new]; [per eat]; //<span style="font-family: Arial, Helvetica, sans-serif;">可以访问m</span> [per run]; } return 0;}
在累的实现代码中定义的m就是一个私有变量,该变量只能在该类中使用,不能被子类继承,也不能被子类使用。下面测试一下
创建一个继承类Student
#import<Foundation/Foundation.h>@interface Student : Person{}-(void)run;@end
实现这个继承类:
#import"Student.h"@implementation Student-(void)run{NSLog(@"人正在走,速度是%d",m);//此处报错,Person类.m中定义的变量不能在此处使用}这个继承类的对象方法中使用了其父类中的私有变量m,编译器报错。
二、OC中的私有(相对私有)方法
OC中并没有像Java或者其他语言中提供的私有方法,OC中的私有,可以理解为相对私有。
OC中私有方法实现有两种方式:
1)方法在.m中实现,不在.h中声明(相对私有)
创建一个类:
#import<Foundation/Foundation.h>@interface Person : NSObject{int _age;NSString *_name;}-(void)run;-(void)eat;@end实现这个类:
#import"Person.h"@implementation Person-(void)run{NSLog(@"人正在走");//可以访问m}-(void)eat{NSLog(@"吃的方法");}-void()test{NSLog(@"我是私有方法");}@end在main中测试:
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, constchar * argv[]) { @autoreleasepool { Person *per=[Person new]; [per eat]; //可以使用 [per run]; //可以使用 [per test]; //不可以使用 } return 0;}
这时候编译器报错,因为test()是私有方法,此文件包含的是#import"Person.h",.h文件可以看做是对外的一个接口,而Person.h中没有声明定义test。当然这个test()也不能被子类继承和使用。那么这个test怎么使用呢?看下面代码:
#import"Person.h"@implementation Person-(void)run{NSLog(@"人正在走,速度是%d",m);//可以访问m}-(void)eat{NSLog(@"m=%d",m);[self test];//可以在本文件的函数中使用}-void()test{NSLog(@"我是私有方法");}@end也就是说,test只能在本文件中被调用,跟static修饰函数的使用方法很类似。
2)通过匿名类别(延展)实现私有(一般意义上的私有)
@interface MyClass { // 添加变量}- (void)PublicMethod;//公共方法,可以被继承类继承@end而在类的.m文件中,采用类别来实现私有方法,具体操作为:
@interface MyClass()//注意(),即定义一个空类别- (void)PrivateMethod;//在类别中定义私有方法@end关于通过匿名类别实现私有方法目前还没有学到,暂时不做过多说明。
0 0
- 黑马程序员——OC语言日志——私有变量和私有方法
- ——黑马程序员——OC中的私有变量、私有方法、descriptiion方法
- OC基础—类的私有方法和私有变量
- OC中私有方法和私有变量
- 黑马程序员——私有 private
- 黑马程序员——私有private
- oc中的相对私有变量和方法
- OC中私有方法和变量
- 私有变量和私有方法
- 私有变量和私有方法
- 黑马程序员——ios知识整理——关于继承、实例变量作用域、私有方法
- 黑马程序员——OC语言------id和构造方法
- 黑马程序员——OC语言基础---对象和方法
- oc定义私有变量和私有属性
- 黑马程序员——OC语言日志——description方法介绍及重写
- 黑马程序员——7、OC语言(成员变量、构造方法)
- 黑马程序员——OC语言日志——多态的概念和实现
- 黑马程序员——OC语言日志——NSArray的介绍和使用
- 【读书笔记】HTML5程序设计 --- 第一章 HTML5 概述
- 操作系统与网络实现 之五
- 九度OJ 1070:今年的第几天? (日期计算)
- 数据结构之二叉树链表
- 高效工作——EA使用技巧
- 黑马程序员——OC语言日志——私有变量和私有方法
- Android Adapter深入理解与优化
- Volley + https
- 基于链式存储的栈
- java 反序列化实例demo
- 史上最全最强SpringMVC详细示例实战教程
- 静态语言和动态语言
- iOS获取User-Agent(UA)信息的方法
- 更新sdk的新方法(速度很快)