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

 

    

posted @ 2015-03-22 19:52  某个人  阅读(224)  评论(0编辑  收藏  举报