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
访问权限: 继承关系:
随机推荐
- VHDL设计时参数定义的方法 例子
-- SPtb LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_ ...
- Qt 设置对话框背景(使用调色板,设置它的画刷,画刷可以是图片)
http://blog.csdn.net/ei__nino/article/details/7305234
- C++ 下 typeof 的实现
现在我们有这样一坨代码: std::vector<int> arr; // ... for(std::vector<int>::iterator iter = arr.begi ...
- 清风注解-Swift程序设计语言:Point1~5
目录索引 清风注解-Swift程序设计语言 Point 1. Swift 风格的"Hello, world" 代码事例: println("Hello, world&qu ...
- python开发的一些tips
1. Notepad++编写python脚本 1)新建文件,编写代码 2)点击菜单栏,“语言”—>“P”—>“Python”,设置脚本为Python语言的高亮(这样保存文本的时候,Note ...
- PLSQl远程连接oracle数据库
PLSQL远程连接Oracle 10G 1.在安装ORACLE服务器的机器上搜索下列文件, ORACLE 服务器上的文件 oci.dll ocijdbc10.dll ociw32.dl ...
- dijkstra 优先队列最短路模板
;;*maxn];,):id(a),dist(b){} )); ;i<=n;i++)dist[i]=inf; dist[st]=; ;i= ...
- ANDROID资源文件【转】
1. 资源包括:文本字符串.图像和图标.音频文件.视频和其他应用程序使用的组件. 2. 在Android工程中,Android资源文件是同Java类文件分开存储的,大多数常见的资源类型存储在XML ...
- BZOJ 2716 Violet 3 天使玩偶 CDQ分治
题目大意:初始给定平面上的一个点集.提供两种操作: 1.将一个点增加点集 2.查询距离一个点最小的曼哈顿距离 K-D树是啥...不会写... 我仅仅会CDQ分治 对于一个询问,查询的点与这个点的位置关 ...
- phpExcel在封装
<?php /** * 数组生成Excel * @author zouhao zouhao619@gmail.com * 使用示例 * $excel =new Excel(); $data=ar ...