iOS开发之OC语法基础(六)--可见度

一、目标

1、熟练使用属性可见度

2、熟练区分属性可见度的特点

二、封装

含义:把相同特征和行为全部包括在类的内部

目的:防止外界去破坏对象内部结构和数据

三、属性可见度

三种常见的属性可见度:

1、公有属性

类的属性集合中,声明为公有性质的属性,该属性可以在当前类的文件或其他文件中进行使用

OC中关键字:@public

2、私有属性

类的属性集合中,声明为私有性质的属性,该属性仅可以在当前类的文件使用

OC中的关键字:@private

3、保护属性

类的属性集合中,声明为保护性质的属性,该属性仅可以在当前类和子类的文件使用

OC中的关键字:@protected

注意:OC中默认的实例变量的属性是保护性质的!!!

四、代码练习

1、创建Person类添加三种可见度的属性

2、创建Person类的子类Student

3、在Student类中添加测试方法-test

4、分别在main函数与test方法中使用Person类的三种属性

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    //公有性质的属性  姓名
    @public
    NSString *name;
    //私有性质的属性  年龄
    @private
    NSInteger age;
    //保护性质的属性  性别
    @protected
    NSString *gender;
}

@end
main.m

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

int main(int argc, const char * argv[]) {
    
    //创建Person类的实例对象
    Person *person = [[Person alloc]init];
    
    //为实例对象person的姓名属性进行赋值
    person->name = @"ios";
    /*
    //为实例对象person的年龄属性进行赋值
    person->age = 10;
    //为实例对象person的性别属性进行赋值
    person->gender = @"man";
    */
    
    NSLog(@"实例对象的姓名是:%@",person->name);
    
    /*
    NSLog(@"实例对象的年龄是:%ld",person->age);
    NSLog(@"实例对象的性别是:%@",person->gender);
    */
    
    //command+b编译一下程序
    //出现4个错误警告,提示age是私有属性,提示gender是保护属性
    //说明在main函数中不能使用私有属性和保护属性,我们将私有属性和保护属性注释
    //然后编译运行正确,说明main函数里面可以使用person的公有属性
    
    return 0;
}

那么私有属性和保护属性的区别在哪呢?

下面新建Student继承Person

Student.jh
#import "Person.h"

@interface Student : Person

//测试方法
- (void)test;

@end
Student.m

#import "Student.h"

@implementation Student

//测试方法
- (void)test{
    self->name = @"Jack";
    /*
    self->age = 20;
    */
    self->gender = @"man";
    
    NSLog(@"实例对象的姓名是:%@",self->name);
    /*
    NSLog(@"实例对象的年龄是:%ld",self->age);
    */
    NSLog(@"实例对象的性别是:%@",self->gender);
    
    //command+b编译
    //出现两个错误警告,提示age是私有属性,并没有警告保护属性gender
    //我们将年龄赋值和打印注释掉
}

@end
mian.m

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

int main(int argc, const char * argv[]) {
    
    //创建学生类的实例对象
    Student *student = [[Student alloc]init];
    
    //对实例对象student发送测试消息
    [student test];
    
    //编译运行成功
    /*
    在子类的实现文件里,是可以直接使用父类的公有性质的属性的,而不能使用父类的私有性质的属性
    在main.m以及其他文件,是不能够使用Person类的保护性质以及私有性质的属性,只能够使用Person类的公有性质属性。
     */
    
    //那么怎么在main函数里面对类的保护和私有属性进行赋值的,这就用到第一节说到的设置器和访问器
    
    return 0;
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值