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相关推荐

  1. public,private,protected访问权限在Java,C++中的解析

    Java中: Java中的访问权限有public,private,protected和默认的包访问权限,如果类中的属性方法没有显示的指明访问权限,则具有包访问权限,我喜欢称它为packeged权限,很 ...

  2. java面试题三十 public,private,protected,default访问权限

    1 考题描述: 2 答案 BD 3解析 B. no modifer既为default也就是friendly 3.1 public,private,protected,default访问权限图 3.2证 ...

  3. java访问权限 public private protected

    作者:yan 1. Java中的访问控制 表1-1 可见/访问性 在同一类中 同一包中 不同包中  同一包子类中  不同包子类中   public  yes  yes  yes  yes  yes   ...

  4. php中public放什么,PHP中常用关键字public, private, protected, static...

    PHP中常用的关键字:public, private, protected, static, interface, implements, final 1.public.protected.priva ...

  5. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  6. PHP Class中public,private,protected,static的区别

    PHP Class中public,private,protected,static的区别 public:权限是最大的,可以内部调用,实例调用,可以被继承. protected:受保护类型,用于本类和继 ...

  7. C++ 类访问控制public/private/protected探讨

    摘要:本文是从饮水思源BBS C/C++版上一篇帖子引发的思考.当时看到帖子,突然觉得平时见惯了的,在这里似乎变得陌生了,究竟访问控制符怎样起作用,怎样使用,该怎样理解,本文试图给出讨论. 原帖如下 ...

  8. php class中public,private,protected的区别以及实例分析

    本篇文章是对php class中public,private,protected的区别以及实例进行了详细的分析介绍,需要的朋友参考下 一,public,private,protected的区别 pub ...

  9. public,private,protected,default详解

    [一]public,private,protected,default public 作用:可以被该类的和非该类的任何成员访问. 注意:使用public关键字声明的类必须与java文件名保持一致,并且 ...

最新文章

  1. 【学习笔记】34、函数是Python的头等对象
  2. ModuleNotFoundError: No module named 'distutils.core'
  3. linux中fstab含义,fstab每一列的含义
  4. 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)
  5. Linux学习之Ubuntu安装Java
  6. 树的基本定义表示方法
  7. opencv学习笔记05
  8. 初中计算机ps教程,初中信息技术《认识Photoshop CS2的工作界面》教案
  9. epoch、 iteration和batchsize的区别
  10. exe电子书转换txt 下载_收藏!一招教你将PDF转换成TXT
  11. Ubuntu18.04中安装virtualenv和virtualenvwrapper
  12. 简单 申请 msn.com邮箱 @
  13. 还在为日语动词变形感到困惑吗?一张图即可搞定
  14. svg html g标签id,svg是什么?svg常用的方法(附代码)
  15. Python创建本地数据库
  16. 苹果+android+扫码支付,苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径...
  17. CFD网格你应该了解的常识
  18. H3C对接外部Portal+Radius认证计费系统实现mac-trigger快速认证Mac无感知认证并结合L2TP实现阿里云部署对接配置
  19. Java使用POI导出Excel .xlsx提示文件格式或文件扩展名有误
  20. 初识Navigation(导航)

热门文章

  1. 《机器人SLAM导航核心技术与实战》第1季:第3章_OpenCV图像处理
  2. 基于OSI模型的车载以太网
  3. Vue拖拽插件(vuedraggable)
  4. 由串口驱动分析rt-thread设备驱动框架
  5. 亮剑“互联网+政务服务”,航天信息助力政府“最多跑一次”改革
  6. Java程序员应该看的14本Java书籍!
  7. 8个优质jquery分页插件
  8. 2022年元宇宙还是一个香饽饽吗?
  9. 快递 10 年,逆袭为王
  10. python lol脚本_python学习笔记系列----(四)模块