一、set方法和get方法
1. set方法和get方法的使用场合
@public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问
2. set方法
1> 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值
2> 命名规范:
* 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母大写
* 形参名称不要跟成员变量同名
3. get方法
1> 作用:返回对象内部的成员变量
2> 命名规范:get方法的名称一般就跟成员变量同名
4. 成员变量的命名规范
* 成员变量都以下划线 _ 开头
* 可以跟get方法的名称区分开
* 可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量
5. 代码示例
#import <Foundation/Foundation.h> // 声明 @interface Car : NSObject { int _wheels; // 轮子个数 } /*set方法*/ - (void) setWheels:(int)wheels; /*get方法*/ - (int) wheels; @end @implementation Car // set方法的实现 - (void) setWheels:(int)wheels { // 对外面传进来的轮子数进行过滤 if (wheels<=0) { wheels = 1; } _wheels = wheels; } // get方法的实现 - (int) wheels { return _wheels; } @end
二、类方法
1. 基本概念
直接可以用类名来执行的方法
2. 类方法和对象方法对比
1> 对象方法
* 以减号-开头
* 只能让对象调用,没有对象,这个方法根本不可能被执行
* 对象方法能访问实例变量(成员变量)
2> 类方法
* 以加号+开头
* 只能用类名调用,对象不能调用
* 类方法中不能访问实例变量(成员变量)
* 使用场合:当不需要访问成员变量的时候,尽量用类方法
3> 类方法和对象方法可以同名
三、self关键字
1. 成员变量和局部变量同名
* 当成员变量和局部变量同名时,采取就近原则,访问的是局部变量
* 用self访问成员变量,区分同名的局部变量
2.使用细节
1> 出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数
2> 作用
* 使用 "self->成员变量名" 访问当前方法调用的成员变量
* 使用 "[self 方法名];" 来调用方法(对象方法\类方法)
四、继承
1. 继承的基本用法
* 设计两个类Bird、Dog
// Bird的声明 @interface Bird : NSObject { @public int weight; } - (void)eat; @end // Bird的定义 @implementation Bird - (void)eat { NSLog(@"吃吃吃-体重:%d", weight); } @end // Dog的声明 @interface Dog : NSObject { @public int weight; } - (void)eat; @end // Dog的定义 @implementation Dog - (void)eat { NSLog(@"吃吃吃-体重:%d", weight); } @end
* 因为有相同的属性和行为,所以可抽出一个父类Animal
// Animal的声明 @interface Animal : NSObject { @public int weight; } - (void)eat; @end // Animal的定义 @implementation Animal - (void)eat { NSLog(@"吃吃吃-体重:%d", weight); } @end
* 子类在父类的基础上拓充属性和方法
// Bird的声明 @interface Bird : Animal { @public int height; } - (void)fly; @end // Bird的定义 @implementation Bird - (void)fly { NSLog(@"飞飞飞-高度:%d", height); } @end // Dog的声明 @interface Dog : Animal { @public int speed; } - (void)run; @end // Dog的定义 @implementation Dog - (void)run { NSLog(@"跑跑跑-高度:%d", speed); } @end
注意:
* 子类方法和属性的访问过程:如果子类没有,就去访问父类的
* 父类被继承了还是能照常使用的
* 子类和父类不能有相同的成员变量
* 方法可以重写
2. super关键字
* 分别调用父类的对象方法和类方法
3. 继承的好处
* 不改变原来模型的基础上,拓充方法
* 建立了类与类之间的联系
* 抽取了公共代码
* 坏处:耦合性强
4. 继承的使用场合
* 它的所有属性都是你想要的,一般就继承
* 它的部分属性是你想要的,可以抽取出另一个父类
五、多态
1. 多态的基本概念
* 某一类事物的多种形态
* OC对象具有多态性
2. 多态的体现
Person *p = [Student new]; p->age = 100; [p walk];
* 子类对象赋值给父类指针
* 父类指针访问对应的属性和方法
3. 多态的好处
* 用父类接受参数,节省代码
4. 多态的局限性
* 不能访问子类的属性(可以考虑强制转换)
5. 多态的细节
* 动态绑定:在运行时根据对象的类型确定动态调用的方法