首页 > 代码库 > 黑马程序员-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对象的三大特性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。