zoukankan      html  css  js  c++  java
  • 封装

    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

  • 相关阅读:
    linux之ftp命令详解
    ubuntu-18.04 设置开机启动脚本
    web端调起Windows系统应用程序(exe执行文件),全面兼容所有浏览器
    logstash 6.6.0 读取nginx日志 插入到elasticsearch中
    微服务架构中服务注册与发现
    logstash kafka output 日志处理
    filebeat输出到kafka
    nginx优化之request_time 和upstream_response_time差别
    利用ldirectord实现lvs后端realserver健康状态检查
    ELK 架构之 Logstash 和 Filebeat 安装配置
  • 原文地址:https://www.cnblogs.com/GhostKZShadow/p/5105191.html
Copyright © 2011-2022 走看看