iOS 成员变量的作用范围

本文详细解析了Objective-C中成员变量的四种作用范围:public、private、protected及package,阐述了它们如何影响父类与子类之间的访问权限,并通过实例展示了不同修饰符的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
  成员变量的作用范围:
  @public:在任何地方都能直接访问对象的成员变量
  @private:只能在当前类的对象方法中直接访问,如果子类要访问需要调用父类的get/set方法
  @protected:可以在当前类及其子类对象方法中直接访问(系统默认下是用它来修饰的)
  @package:在同一个包下就可以直接访问,比如说在同一个框架

注意:
    无论父类是在@interface还是@implementation声明的成员变量子类都能拥有;但是子类能不能直接通过变量名来访问父类中定义的成员变量是需要看父类中定义的成员变量是由什么修饰符来修饰的。
 
默认:在@implementation中成员变量的修饰符为@private,
     在@interface中成员变量的修饰符@protected

 */


#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    @public
    int _no;            // 学号
    
    @private
    int _age;           // 年龄
    
    @protected
    NSString *_name;    // 姓名
    
}

// 由@pirvate修饰的成员变量,子类对象只能通过get/set来访问
- (void)setAge:(int)age;
- (int)age;

@end



/********************************在mian方法中*******************************/

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[])
{
    
    Person *person = [Person new];
    // 在Person.h文件中no是@public修饰的可以直接访问
    person->_no = 10;
    NSLog(@"%d",person->_no); // 打印是10
    
    // Student类继承了父类Person类中的所有成员变量和方法,但是子类不能直接访问父类中由@private修饰的成员变量
    Student *stu = [Student new];
    [stu setAge:1000];
    NSLog(@"%d",[stu age]);
    
    return 0;
}

 

转载于:https://www.cnblogs.com/QM80/p/3575605.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值