第四天-成员变量可见性

//
//  main.m
//  02-

//
//  Created by Apple on 14/11/21.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CZPerson.h"

int main(int argc, const char * argv[]) {

    CZPerson *p = [CZPerson new];
    
//    p->_age = 10;
    
//    p->_name = @"hhh";
    
    p->_height = 50.0;
    
    return 0;
}


//
//  CZPerson.h
//  1121-知识点的回顾
//
//  Created by Apple on 14/11/21.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
/*
   @private:私有的,只有本类的对象方法中中可以直接访问访问它
                   成员变量在那个类中定义的才能在那个类中使用
   @protected:受保护的:只能在本类和子类中可以直接访问,不再外部访问
 
   @public:公共的,大家都可以用,在本类,子类,外部都可以访问
 
   @package: 主要用在框架内部,在框架内部相当于@protected,在框架外部相当于@private(了解)
 
   本类:定义这个成员变量的类
   控制可见性的修饰符,从使用开始直到所有成员变量结束或遇到其他的控制可见性修饰符为止
 
 */
@interface CZPerson : NSObject
{
@private
    int _age;//年龄
@protected
    NSString *_name;//姓名
@public //公共
    double _height;//高度
@package
    double _weight;//体重
    
}

- (void) setAge:(int) age;

- (int) age;

@end

//
//  CZPerson.m
//  1121-知识点的回顾
//
//  Created by Apple on 14/11/21.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZPerson.h"

@implementation CZPerson
{
//   在实现文件里面也可以定义成员变量,但是这个成员变量是私有的,无论使用什么样的可见性修饰符,修饰它,它都是私有的
@public
    int _sex;
}
- (void) setAge:(int) age
{
    
    _sex = 0;//表示男
    
    _age = age;
//  @protected修饰的成员变量在本类中可见(可以访问)
    _name = @"yyy";
    
//  @public的变量可以本类中访问
    _weight = 10.5;
    
}

- (int) age
{
    return _age;
}

@end

//
//  CZStudent.h
//  1121-知识点的回顾
//
//  Created by Apple on 14/11/21.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZPerson.h"

@interface CZStudent : CZPerson
{
//  父类中私有的成员变量,在子类中已经存在了,只是没有权限访问
//  在子类中不可以定义与父类同名变量,哪怕这个变量在父类中是私有
//  int _age;
}
//测试@private的变量的
- (void) testPrivate;

@end

//
//  CZStudent.m
//  1121-知识点的回顾
//
//  Created by Apple on 14/11/21.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZStudent.h"

@implementation CZStudent

- (void) testPrivate
{
//    _age = 10;
//    _height = 10;
}


- (void) testProtected
{
//  @protected修饰的成员变量在子类中可访问
    _height = 20;
    _name = @"xxx";
}

- (void) testPublic
{
//  @public 在子类中访问
    _weight = 100.0;
    
}
//测试实现类内部定义成员变量能否在子类中访问
-(void) testImpletation
{
//    _sex = 10;
    
}

@end


你可能感兴趣的:(第四天-成员变量可见性)