zoukankan      html  css  js  c++  java
  • Object-C——三大特性之封装

    面向对象中,程序的三大特性分别为:封装、继承和多态

    一、封装

        为了保护类的变量被外界随意访问,我们对类进行封装,使用特定的方法对封装的类中的成员进行访问。

        封装的好处:

    • 过滤不合理的值
    • 屏蔽内部的赋值过程
    • 让外界不必关注内部的细节

         (一)、 set方法

          1、作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤

          2、命名规范:

           ①  方法名必须以set开头

           ②  set后面跟上成员变量的名称,成员变量的首字母必须大写

           ③  返回值一定是void

           ④  一定要接收一个参数,而且参数类型跟成员变量类型一致

           ⑤  形参的名称不能跟成员变量名一样

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Student : NSObject
     4 {
     5     //去掉@public
     6     
     7     int age;
     8     }
     9 - (void)setAge:(int)newAge;
    10 @end
    11 @implementation Student
    12 
    13 // set方法的实现
    14 - (void)setAge:(int)newAge
    15 {
    16     // 对传进来的参数进行过滤
    17     if (newAge <= 0)
    18     {
    19         newAge = 1;
    20     }
    21     
    22     age = newAge;
    23 }
    24 
    25 - (int)age
    26 {
    27     return age;
    28 }

       (二)get方法

          1、作用:返回对象内部的成员变量

          2、命名规范:

              ①  肯定有返回值,返回值类型肯定与成员变量类型一致

              ②  方法名跟成员变量名一样

              ③  不需要接收任何参数

     1 #import <Foundation/Foundation.h>
     2 // 声明
     3 @interface Car : NSObject
     4 {
     5     int _wheels; // 轮子个数
     6 }
     7 /*get方法*/
     8 - (int) wheels;
     9 @end
    10 
    11 @implementation Car
    12 // get方法的实现
    13 - (int) wheels
    14 {
    15     return _wheels;
    16 }
    17 @end

     (三)类方法

         直接可以用类名来执行的方法

         1、对象方法

              ①  减号 - 开头

              ②  只能由对象来调用

              ③  对象方法中能访问当前对象的成员变量(实例变量)

         2、类方法

             ①  加号 + 开头

             ②  只能由类(名)来调用

             ③  类方法中不能访问成员变量(实例变量)

         3、类方法的好处和使用场合

             ①  不依赖于对象,执行效率高

             ②  能用类方法,尽量用类方法

             ③  场合:当方法内部不需要使用到成员变量时,就可以改为类方法

         4、可以允许类方法和对象方法同名

         5、代码举例

     1 @interface Person : NSObject
     2 {
     3     int age;
     4 }
     5 
     6 // 类方法都是以+开头
     7 + (void)printClassName;
     8 
     9 - (void)test;
    10 + (void)test;
    11 
    12 @end
    13 
    14 @implementation Person
    15 
    16 + (void)printClassName
    17 {
    18     
    19     // 实例变量age不能在类方法中访问
    20    
    21 }
    22 
    23 - (void)test
    24 {
    25     NSLog(@"111-%d", age);
    26     
    27     //[Person test];
    28 }
    29 
    30 + (void)test
    31 {
    32    
    33     
    34     NSLog(@"333");
    35 
    36 }
    37 
    38 @end

     (四)self关键字

           1、self的用途:

            ① 谁调用了当前方法,self就代表谁

                * self出现在对象方法中,self就代表对象

                * self出现在类方法中,self就代表类

            ②  在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

            ③  [self 方法名]可以调用其他对象方法类方法

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 {
     5     int _age;
     6 }
     7 
     8 - (void)setAge:(int)age;
     9 - (int)age;
    10 
    11 - (void)test;
    12 
    13 @end
    14 
    15 @implementation Person
    16 - (void)setAge:(int)age
    17 {
    18     // _age = age;
    19     self->_age = age;
    20 }
    21 - (int)age
    22 {
    23     return self->_age;
    24 }
    25 
    26 - (void)test
    27 {
    28     // self:指向了方向调用者,代表着当期对象
    29     int _age = 20;
    30     NSLog(@"Person的年龄是%d岁", self->_age);
    31 }
    32 
    33 @end

          2、self关键字使用注意

             防止出现死循环现象,代码举例如下:

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Person : NSObject
     4 - (void)test;
     5 + (void)test;
     6 @end
     7 
     8 @implementation Person
     9 - (void)test
    10 {
    11     NSLog(@"调用了-test方法");
    12     
    13     // 会引发死循环
    14     //[self test];
    15 }
    16 
    17 + (void)test
    18 {
    19     NSLog(@"调用了+test方法");
    20     
    21     // 会引发死循环
    22     //[self test];
    23 }
    24 @end

        

  • 相关阅读:
    普通用户权限问题解决:hadoop is not in the sudoers file. This incident will be reported.
    新安装的Ubuntu系统中默认的root用户密码是多少,怎么修改?
    Ubuntu环境变量恢复
    无法获得数据库 'model' 上的排他锁 解决办法
    linux常用命令大全
    Windows 10/Win10命令大全通用(Win8,Win7)
    SQLServer 创建SQL Server 身份验证用户
    SQL注入学习笔记
    vbs整人脚本,别运行!!!
    Linux命令行编辑常用的快捷键
  • 原文地址:https://www.cnblogs.com/gaizuojia/p/4357034.html
Copyright © 2011-2022 走看看