Objective-c - 私有属性和真私有属性

来源:互联网 发布:csol淘宝租号 编辑:程序博客网 时间:2024/05/23 02:16

/*

 

 1>

 私有属性:@private修饰的属性,叫做私有属性.

 

 私有属性的访问权限:

 在当前类/子类的外部:不可以通过对象名->_属性名访问,但可以通过settergetter方法访问;

 在当前类的内部:可以通过_属性名访问,也可以通过settergetter方法访问;

 在当前子类的内部:不可以通过_属性名访问,但可以通过settergetter方法访问;

 

 2>

 真私有属性:定义在@implementation中的属性叫做真私有属性.

 

 真私有属性的访问权限:与私有属性的访问热权限相同;

 在当前类/子类的外部:不可以通过对象名->_属性名访问,但可以通过settergetter方法访问;

 在当前类的内部:可以通过_属性名访问,也可以通过settergetter方法访问;

 在当前子类的内部:不可以通过_属性名访问,但可以通过settergetter方法访问;

 

 区别在于:私有属性在无权访问的地方在Xcode中系统会有提示;而真私有属性连提示都不会有.

 

 私有属性和真私有属性子类不可以直接访问,但是可以通过settergetter方法访问.

 子类可以继承私有属性和真私有属性.

 

 

 

 */

#import <Foundation/Foundation.h>


#pragma mark -

#pragma mark 人类的创建

//声明

@interface YYPerson : NSObject

{

@private

    NSString *_name;

    int _age;

}


- (void)setName:(NSString *)name;

- (NSString *)name;


- (void)setAge:(int)age;

- (int)age;


- (void)setBadHabit:(NSString *)badHabit;

- (NSString *)badHabit;


- (void)sayHi;


@end

//实现

@implementation YYPerson

{

    NSString *_badHabit;//定义在@implementation中的属性为真私有属性.

}

- (void)setName:(NSString *)name

{

    _name = name;

}

- (NSString *)name

{

    return _name;

}


- (void)setAge:(int)age

{

    _age = age;

}

- (int)age

{

    return _age;

}


- (void)setBadHabit:(NSString *)badHabit

{

    _badHabit = badHabit;

}

- (NSString *)badHabit

{

    return_badHabit;

}


- (void)sayHi

{

    NSLog(@"大家好,我叫%@,今年%d岁了.我有一个嗜好是%@,非常抱歉!",_name, _age, _badHabit);

}

@end


#pragma mark -

#pragma mark 学生类的创建

//子类可以继承父类的私有属性

//声明

@interface YYStudent : YYPerson


@end

//实现

@implementation YYStudent



@end


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

    

    //创建人对象

    YYPerson *xiaoming = [YYPersonnew];

    //赋值属性:在当前类的外部:不可以通过对象名->_属性名访问,Xcode会进行提示.

    [xiaoming setName:@"小明"];

    [xiaoming setAge:18];

    [xiaoming setBadHabit:@"吸烟"];//此属性为真私有属性Xcode不会进行提示.

    //调用方法

    [xiaoming sayHi];

    

    //创建学生对象

    YYStudent *xiaoqiang = [YYStudentnew];

    //赋值属性:在当前子类的外部:不可以通过对象名->_属性名访问,Xcode会进行提示.

    [xiaoqiang setName:@"小强"];

    [xiaoqiang setAge:16];

    [xiaoqiang setBadHabit:@"喝酒"];//此属性为真私有属性Xcode不会进行提示.

    //调用方法

    [xiaoqiang sayHi];

    

    return 0;

}

1 0
原创粉丝点击