iOS 成员变量的作用范围

/*
  成员变量的作用范围:
  @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