首页 > 代码库 > 黑马程序员-OC对象的三大特性

黑马程序员-OC对象的三大特性

OC语言是面向对象的语言,其三大特性必不可少。

一、封装是一个很重要的概念,它避免外界直接访问或修改对象的属性,可以过滤不合理的值,让外界不必关心内部的细节。通过set方法来让外部设置成员的属性值,通过get方法来获得对象属性值。

 1 #import <Foundation/Foundation.h> 2 @interface Student : NSObject</span></span> 3 { 4     int  _age;        //以下划线开头,避免和局部变量弄混 5     int _no;  6 } 7  8 - (void)setAge:(int)newAge;    // set方法的声明,函数名和参数用:隔开,返回值一定是void型 9 - (int)age;                    // get方法的声明10 - (void)study;11 @end12 13 @implementation Student14 - (void)setAge:(int)newAge       // set方法的实现</span>15 {16    17     if (newAge <= 0)             // 对传进来的参数进行过滤18     {19         newAge = 1;20     }21     22     _age = newAge;23 }24 25 - (int)age                       // get方法的实现</span>26 {27     return _age;28 }29 - (void)study</span>30 {31     NSLog(@"%d岁的学生在学习", _age);32 }33 @end34 35 int main()36 {37     Student *stu = [Student new];38     [stu setAge:10];                             // 调用对象的set方法39     NSLog(@"学生的年龄是%d岁", [stu age]);       // 调用函数的get方法40     [stu study]; 41      return 0;42 }

注意事项:

set方法

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

2.命名规范:

1> 方法名必须以set开头

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

3> 返回值一定是void

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

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

get方法

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

2.命名规范:

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

2> 方法名跟成员变量名一样

3> 不需要接收任何参数

二、继承可以实现之类与类之间的关系,抽取的公共代码,在原有的基础上扩充了方法。缺点是耦合性太强

继承的使用场合:

1>它的所有属性都是你想要的,一般就继承

2>它的部分属性是你想要的,可以抽取出另一个父类

 1 @interface Animal : NSObject 2 - (void)eat; 3 @end 4  5 #import <Foundation/Foundation.h> 6 // Person 7 @interface Person : NSObject 8 { 9     int _age;10 }11 12 - (void)setAge:(int)age;13 - (int)age;14 - (void)run;15 + (void)test;        //类方法,以+号开头16 @end17 18 @implementation Person19 + (void)test         //类方法实现20 {21     NSLog(@"Person+test");22 }23 - (void)run24 {25     NSLog(@"person---跑");26 }27 - (void)setAge:(int)age28 {29     _age = age;30 }31 - (int)age32 {33     return _age;34 }35 @end36 37 @interface Student : Person      // Student子类38 {39     int _no;40     // int _age;         // 不允许子类和父类拥有相同名称的成员变量41 }42 + (void)test2;43 @end44 45 @implementation Student</span>46 47 - (void)run            // 重写:子类重新实现父类中的某个方法,覆盖父类以前的做法</span>48 {49     NSLog(@"student---跑");50 }

 

三、多态是把不同的子类当做父类来看,可以屏蔽不同子类之间的差异,写出通用的代码,作出通用的编程,以适应需求的变化。子类对象赋值给父类指针,父类指针来访问对应的属性和方法。

 1 @interface Animal : NSObject 2 - (void)eat; 3 @end 4  5 @implementation Animal 6 - (void)eat 7 { 8     NSLog(@"Animal-吃东西----"); 9 }10 @end11 12 @interface Dog : Animal          //狗之类继承动物父类13 - (void)run;     //增加跑方法14 @end15 16 @implementation  Dog17 - (void)run18 {19     NSLog(@"Dog---跑起来");20 }21 - (void)eat                      //重写方法22 {23     NSLog(@"Dog-吃东西----");24 }25 @end26 27 @interface Cat : Animal       //之类猫继承父类动物28 @end29 30 @implementation Cat31 - (void)eat                    //重写方法32 {33     NSLog(@"Cat-吃东西----");34 }35 @end36 37 int main()</span>38 {39    40     Animal *a = [Dog new];    // 多态:父类指针指向子类对象41     [a eat];                  // 调用方法时会检测对象的真实形象42     return 0;43 }

 

黑马程序员-OC对象的三大特性