封装

1 定义类的时候,哪些字段和方法不想暴露出去,哪些字段和方法可以暴露,可以通过修饰符【OC中的方法是没有修饰符的概念的,我们可以通过其他方法】来完成,这就是封装
 
        // 封装:把变量封装到内部
        // set方法:让你设置我的年龄
        // 方法名必须以set开头
        // 返回类型为void
        // 参数类型和成员变量的类型一样
        
        
        // get方法
        // 返回类型为成员变量的类型
        // 方法名为变量名
        // 没有参数


下面来看一个例子吧:
Car.h
[objc]  view plaincopy
1. //  Car.h  
2. //  05_ObjectDemo  
3. //  
4. //  Created by jiangwei on 14-10-11.  
5. //  Copyright (c) 2014年 jiangwei. All rights reserved.  
6. //  
7.   
8. #import <Foundation/Foundation.h>  
9.   
10. @interface Car : NSObject{  
11.     //这个属性就是对外进行保密的相当于private,所以我们需要在外部访问的话,必须定义get/set方法  
12.     //默认的是private的,但是我们可以使用@public设置为public属性的,那么在外部可以直接访问:person->capcity = 2.8;  
13.     //当然我们一般不这么使用,因为这会破坏封装性,这种用法相当于C中的结构体中权限  
14.     //一共四种:@public,@protected,@private,@package,这个和Java中是相同的  
15. @public  
16.     float _capcity; //油量属性  
17. }  
18.   
19. - (void)run:(float)t;  
20.   
21. @end  
这里我们可以看到,OC中也是有四种访问权限修饰符:
@public@protected@private@package
其中默认的修饰符是@private
但是这里要注意的是:OC中的方法是没有修饰符的概念的,这个和Java有很大的区别,一般都是公开访问的,即public的,但是我们怎么做到让OC中的一个方法不能被外界访问呢?
OC中是这么做的,如果想让一个方法不被外界访问的话,只需要在.m文件中实现这个方法,不要在头文件中进行定义,说白了就是:该方法有实现,没定义,这样外界在导入头文件的时候,是没有这个方法的,但是这个方法我们可以在自己的.m文件中进行使用。
例题
main.m

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, constchar * argv[]) {

    @autoreleasepool {

        Student *stu = [Studentnew];
 
        // 封装:把变量封装到内部

        // set方法:让你设置我的年龄

        // 方法名必须以set开头

        // 返回类型为void

        // 参数类型和成员变量的类型一样

        // set
 
        [stu setAge:5];        

        // get

        // 返回类型为成员变量的类型

        // 方法名为变量名

        // 没有参数

        int age = [stu age];

        NSLog(@"年龄是:%d",age);
 
//        [stu myLog];
   }

    return 0;

}

 
Student.h
 
#import <Foundation/Foundation.h>
@interface Student : NSObject
 
{
    // 成员变量的命名规范以_开头
    // 区分局部
    int _age;

}

-(void)myLog;

// set方法

-(void)setAge:(int)age;

// get方法

-(int)age;

@end

 
Student.m

#import "Student.h"

@implementation Student

-(void)myLog

{

    NSLog(@"学生年龄是:%d",_age);

}

-(void)setAge:(int)age

{

    if (age <= 0) {

        age = 3;

    }

    

    _age = age;

}

-(int)age

{

    return_age;

}

@end

原文地址:https://www.cnblogs.com/GhostKZShadow/p/5105191.html