@public @private @protected @package
1)@public (公开的)包含@protected的作用范围;并且在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问(在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的)
(3)@private (私有的)只能在当前类的对象方法中才能直接访问(定义在m文件中的类扩展部分或者是@implementation内)
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问
首先定义三个类,Person类,Children类,Animal类,其中Children类是Person类的子类。
Person类头文件:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *name;
@public int age;
@private float wegiht;
}
-(void)setName;
-(void)setAge;
-(void)setWegiht;
@end
Person类m文件:
#import "Person.h"
//在当前类对象的方法中都能访问之前定义的实例变量,无论是@private,@protected,还是@public
@implementation Person
-(void)setName {
name=@"wall";
NSLog(@"%@",name);
}
-(void)setAge {
age=20;
NSLog(@"%d",age);
}
-(void)setWegiht{
wegiht=50;
}
@end
接下来看Children类,也就是Person类子类的头文件和m文件
头文件:
#import "Person.h"
@interface Children : Person
@end
m文件:
#import "Children.h"
//由于name变量是@protected,age变量是@public,wegiht变量是@private ,所以Children类的对象方法中不能访问wegiht变量,而可以访问name变量和age变量
@implementation Children
-(void)setName {
name=@"small wall";
}
-(void)setAge {
age=8;
}
@end
如果访问私有变量wegiht,则会报错:
接下来看main文件:
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Children.h"
#import "Animal.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
//由于age变量是@public,所以在有对象的前提下,是可以直接访问,其他的变量是不可以直接访问的
Person *xiaoming=[[Person alloc]init];
[xiaoming setAge];//此时age=20
xiaoming->age=24;//直接访问public变量
NSLog(@"%d",xiaoming->age);
Children *baobao=[[Children alloc]init];
baobao->age=2;//直接访问public变量
NSLog(@"%d",baobao->age);
}
return 0;
}
@interface部分为类扩展(extension)。
其被设计出来就是为了解决两个问题的,
其一,定义类私有方法的地方。
其二,实现public readonly,private readwrite的property(意思是在h头文件中定义一个属性对外是readonly的,但在类的内部希望是可读写的,所以可以在m源文件中的@interface部分重新定义此属性为readwrite,此时此属性对外是只读的,对内是读写的),虽然是这么说但是实测在xcode10上h头文件中定义一个属性对外是readonly的,.m里面的方法还是可以,原因是自定义了set方法,所以没问题,没的话确实报错。
此外,也可在此部分申明变量和属性,但申明的变量,属性和方法均为私有的,只能够被当前类访问,相当于private。
原文:https://blog.csdn.net/chokshen/article/details/52944648
@public @private @protected @package相关推荐
- public,private,protected访问权限在Java,C++中的解析
Java中: Java中的访问权限有public,private,protected和默认的包访问权限,如果类中的属性方法没有显示的指明访问权限,则具有包访问权限,我喜欢称它为packeged权限,很 ...
- java面试题三十 public,private,protected,default访问权限
1 考题描述: 2 答案 BD 3解析 B. no modifer既为default也就是friendly 3.1 public,private,protected,default访问权限图 3.2证 ...
- java访问权限 public private protected
作者:yan 1. Java中的访问控制 表1-1 可见/访问性 在同一类中 同一包中 不同包中 同一包子类中 不同包子类中 public yes yes yes yes yes ...
- php中public放什么,PHP中常用关键字public, private, protected, static...
PHP中常用的关键字:public, private, protected, static, interface, implements, final 1.public.protected.priva ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- PHP Class中public,private,protected,static的区别
PHP Class中public,private,protected,static的区别 public:权限是最大的,可以内部调用,实例调用,可以被继承. protected:受保护类型,用于本类和继 ...
- C++ 类访问控制public/private/protected探讨
摘要:本文是从饮水思源BBS C/C++版上一篇帖子引发的思考.当时看到帖子,突然觉得平时见惯了的,在这里似乎变得陌生了,究竟访问控制符怎样起作用,怎样使用,该怎样理解,本文试图给出讨论. 原帖如下 ...
- php class中public,private,protected的区别以及实例分析
本篇文章是对php class中public,private,protected的区别以及实例进行了详细的分析介绍,需要的朋友参考下 一,public,private,protected的区别 pub ...
- public,private,protected,default详解
[一]public,private,protected,default public 作用:可以被该类的和非该类的任何成员访问. 注意:使用public关键字声明的类必须与java文件名保持一致,并且 ...
最新文章
- 【学习笔记】34、函数是Python的头等对象
- ModuleNotFoundError: No module named 'distutils.core'
- linux中fstab含义,fstab每一列的含义
- 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)
- Linux学习之Ubuntu安装Java
- 树的基本定义表示方法
- opencv学习笔记05
- 初中计算机ps教程,初中信息技术《认识Photoshop CS2的工作界面》教案
- epoch、 iteration和batchsize的区别
- exe电子书转换txt 下载_收藏!一招教你将PDF转换成TXT
- Ubuntu18.04中安装virtualenv和virtualenvwrapper
- 简单 申请 msn.com邮箱 @
- 还在为日语动词变形感到困惑吗?一张图即可搞定
- svg html g标签id,svg是什么?svg常用的方法(附代码)
- Python创建本地数据库
- 苹果+android+扫码支付,苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径...
- CFD网格你应该了解的常识
- H3C对接外部Portal+Radius认证计费系统实现mac-trigger快速认证Mac无感知认证并结合L2TP实现阿里云部署对接配置
- Java使用POI导出Excel .xlsx提示文件格式或文件扩展名有误
- 初识Navigation(导航)