黑马程序员-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 @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 }
时间: 2024-08-27 18:02:18

黑马程序员-OC对象的三大特性的相关文章

黑马程序员——OC面向对象的三大特性

一.面向对象的三大特性:封装(成员变量).继承和多态 1. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数 2. set方法 1) 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值 2) 命名规范: ? 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写 ? 形参名称不要跟成员变量同名 3

黑马程序员-oc对象的内存管理

oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理: oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象:当计数器为0时该对象会从内存中释放: 相关方法和概念: 1:retain:对象方法,调用该对象方法,计数器+1,有返回值,返回对象本身: 2:release:没有返回值,计数器-1: 3:retainCount:获取当前计数器的值: 4:dealloc:当对象被回收时,就会调用该方法,覆盖该方法时一定要调用[super dea

黑马程序员 oc对象的方法成员变量

#import <Foundation/Foundation.h> typedef enum { SexMan, SexWoman } Sex; @interface Person : NSObject { /* 成员变量名前用下划线有3个用处 1>方便程序员之间的交流,一看到下划线就知道这个事成员变量 2>为了与getter方法中的方法名区分开 3>不与局部变量名重合 */ int _age; Sex _sex; } // 设置setter和getter方法 // 为了数据

黑马程序员 oc对象的行为和内存分析,匿名对象

#import <Foundation/Foundation.h> @interface Car : NSObject { @public int speed; int wheels; } // oc方法必须是-开头 // oc方法中所有的数据类型必须得用括号括起来 // oc方法中的()就是用来扩住数据类型的 -(void)run; @end @implementation Car - (void)run { NSLog(@"%d个轮子和速度为%d的车子跑起来了!");

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-OC学习笔记之Foundatio框架集合类

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1?不可变数组的创建 // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥" NSArray *array1 = [NSArray arrayWithObject:@"小桥"]; // 创建一个不可变数组,元素为多个O

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property