Object-c中@private、@protected、@public解析
Objective-C中,类的实例化变量的范围有@private、@protected、@public。他们代表的意思和C++中相同,只是前面添加了一个@符号。下面介绍一下他们代表的范围:
| 指令 | 意思 |
|
@private |
作用范围只能在自身类 |
| @protected | 作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。 |
| @public | 作用范围最大,在任何地方 |
下面是官方的图:

下面是一个例子,来说明他们之间的关系:
实现一个Boss类:
#import <Foundation/Foundation.h>
@interface Boss : NSObject
{
@private
int age;
@protected
NSString *job;
}
@end
实现一个Worker类继承Boss类:
#import <Foundation/Foundation.h>
#import "Boss.h"
@interface Worker : Boss
{
NSString *name;
@private
NSString *evaluation;
@protected
float wage;
@public
NSString *boss;
}
- promoteTo:newPosition;
@end
在Worker的.m文件中添加:
#import "Worker.h"
@implementation Worker
- promoteTo:newPosition
{
id old = job;
job = newPosition;
return old;
}
-(NSString *)description
{
return [NSString stringWithFormat:@"Worker name:%@,evaluation:%@,job:%@,wage:%f,boss:%@",name,evaluation,job,wage,boss];
}
@end
如果我们在Worker中调用Boss中的私有变量age,会报错:

但是调用job是没有问题的。
下面在其他类中调用Worker类:
Worker *ceo = [[Worker alloc] init];
ceo->boss = @"XX";
[ceo promoteTo:@"YY"];
NSLog(@">>>=%@",[ceo description]);
运行结果:

但是调用protected的属性会报错:

所以当一些比较重要的属性,不能随便更改的时候,要用private,这样避免其他继承类修改此属性。
Object-c中@private、@protected、@public解析的更多相关文章
- private,protected,public和default的区别
private,protected,public和default的区别 除了default以外,其他都是Java语言的关键字.default代表的是对类成员没有进行修饰的情况.它本身也代表了一种访问控 ...
- @private@protected@public@package
@private@protected@public@package 为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性 但是为了提供灵活性,苹果也让开发者显式设置范围(四选一) ...
- oc 中四种实例变量的范围类型@private@protected@public@package
To enforce the ability of an object to hide its data, the compiler limits the scope of instance vari ...
- iOS中四种实例变量的范围类型@private@protected@public@package
文档上记录是这样的 The Scope of Instance Variables Toenforce the ability of an object to hide its data, the c ...
- 面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序
第一:private, public, protected访问标号的访问范围. private:只能由 1.该类中的函数 2.其友元函数访问 不能被任何其他访问,该 ...
- 对private protected public的详解:
#include <iostream> #include <stack> #include <queue> #include <exception> # ...
- PHP中private、public、protected的区别详解
先简单粗俗的描述下:public 表示全局,类内部外部子类都可以访问:private表示私有的,只有本类内部可以使用:protected表示受保护的,只有本类或子类或父类中可以访问: 再啰嗦的解释下: ...
- Java中的private protected public和default的区别
转至:http://blog.sina.com.cn/s/blog_74c571240101jaf5.html 类内部 本包 子类 外部包 public √ √ √ √ pro ...
- PHP中private和public还有protected的区别
原文链接:http://www.thinkphp.cn/code/1898.html <? //父类 class father{ public function a(){ echo " ...
- C++中的private/protected/public
访问权限: 继承关系:
随机推荐
- 13.java.lang.NoSuchFiledException
java.lang.NoSuchFiledException 方法不存在异常 当程序试图通过反射来创建对象,访问(修改或读取)某个filed,但是该filed不存在就会引发异常
- Windows Azure 网站:应用程序字符串和连接字符串的工作原理
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站上有一个方便的功能,即开发人员可将 Azure 中的 ...
- swift3.0 扩展、协议(4)
扩展和协议是swift中的两个特性,用于对已有的类型进行扩展和修改. 扩展(extension) 向已经存在的类型添加新的功能(属性.方法.下标脚本等等),扩展使用extension关键字定义,语法 ...
- iOS 退出应用程序
退出应用程序,方法很简单,只是动画效果没有那么好. - (void)exitApplication { AppDelegate *app = [UIApplication sharedApplicat ...
- 【我所認知的BIOS】—>ADU.exe
[我所認知的BIOS]—>ADU.exe By LightSeed 2009-5-12 1.概要 在學習的過程中,肯定會要用不少的工具,作為底層的engineer那麼用的工具大多是DOS下.在D ...
- cmd命令 拷贝某文件夹及其子文件夹文件到其它文件夹
@ECHO OFF cd/d %H:\FileLoc\CNET&cd.. ::echo 拷贝"%H:\FileLoc\CNET"中文件到"H:\FileLocTe ...
- MySQL学习笔记(3)
约束 作用:保证数据的完整性,唯一性 根据字段:分为表级约束(针对2个或者2个以上字段使用),列级约束(针对1个字段使用) 约束类型:NOT NULL 非空约束 PRIMARY KEY 主键约束 U ...
- jQuery获取Select选择的Text(非表单元素)和 Value(表单元素)(转)
jQuery获取Select选择的Text和Value: 语法解释: . $("#select_id").change(function(){//code...}); //为Sel ...
- Deep Learning(深度学习)学习笔记整理系列之(六)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Windows 10 : 使用BCDboot恢复双系统启动
电脑装上win10以后,立马把原来系统的启动信息删了.结果有个软件需要反激活,但是Win10已经没有Boot.ini这样的启动配置文件. 花了好多时间查找,发现这篇文章.实际操作倒是很简单.执行以下命 ...