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 @end 12 13 @implementation Student 14 - (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 @end 34 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 @end 17 18 @implementation Person 19 + (void)test //类方法实现 20 { 21 NSLog(@"Person+test"); 22 } 23 - (void)run 24 { 25 NSLog(@"person---跑"); 26 } 27 - (void)setAge:(int)age 28 { 29 _age = age; 30 } 31 - (int)age 32 { 33 return _age; 34 } 35 @end 36 37 @interface Student : Person // Student子类 38 { 39 int _no; 40 // int _age; // 不允许子类和父类拥有相同名称的成员变量 41 } 42 + (void)test2; 43 @end 44 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 @end 11 12 @interface Dog : Animal //狗之类继承动物父类 13 - (void)run; //增加跑方法 14 @end 15 16 @implementation Dog 17 - (void)run 18 { 19 NSLog(@"Dog---跑起来"); 20 } 21 - (void)eat //重写方法 22 { 23 NSLog(@"Dog-吃东西----"); 24 } 25 @end 26 27 @interface Cat : Animal //之类猫继承父类动物 28 @end 29 30 @implementation Cat 31 - (void)eat //重写方法 32 { 33 NSLog(@"Cat-吃东西----"); 34 } 35 @end 36 37 int main()</span> 38 { 39 40 Animal *a = [Dog new]; // 多态:父类指针指向子类对象 41 [a eat]; // 调用方法时会检测对象的真实形象 42 return 0; 43 }