标签:
------- ios培训、 android培训、java培训、期待与您交流! ----------
一.两个关键字self和super
1.局部变量与成员变量
(1)在方法内部可以定义与成员变量同名的局部变量。
在局部变量作用域内,会覆盖成员变量
(2)如果在方法内部定义了与成员变量同名的局部变量。
通过self访问成员变量,以区别局部变量
(3)全局变量是整个文件共享的,如果在一个方法中修改全局变量,在其他方法中使用这个全局变量都会修改
(4)就近原则:
查找顺序:局部变量 -> 成员变量 -> 全局变量
2.self与方法
(1)在对象方法中,self就是调用这个方法的对象
(2)在类方法中,self就是类本身
(3)如果在对象方法中去调用该类其他的对象方法,只能通过self
ps:无论在对象方法还是类方法中,谁调用这个方法,self就是谁
不能在函数中使用
3.super
在继承关系中,子类重写父类方法想调用父类的方法,保留父类的一些功能就使用super关键字
二.继承
1.特点:(1)当A类继承B类,那么A类拥有B类所有的成员变量和方法
(2)好处: 代码重用
(3)缺点:耦合度很高,父类的改变影响所有子类
2.使用场景:当发现一个类是另一个类衍生出来的时候可以使用继承
3.继承体系中方法调用的顺序:
在自己类中找,如果没有去父类中找,以此类推,直到基类 :NSObject
ps:所以,如果子类不想使用父类方法,可以重写父类方法。
4.注意点:
(1)类方法也可以继承
(2)子类可以重写父类的类方法
(3)子类不可以定义与父类重名的成员变量
代码演示:
/**设计一个iphone类 属性:颜色 内存 像素
功能:打电话 拍照
设计一个iphone2类 属性:颜色 内存 像素 闪光灯
功能:打电话 照明 拍照
*/
//CZIphone声明
#import <foundation/foundation.h>
#import "CZIphone.h"
//定义颜色枚举
typedef enum _CZColour
{
CZColourwhite,// 白色
CZColourblack // 黑色
}CZColour;
@interface CZIphone : NSObject
{
CZColour _colour;// 颜色
int _ram; // 内存
NSString * _camera;// 像素
}
- (void) setColour: (CZcolour) colour;
- (void) setRam: (int) Ram;
- (void) setCamera: (NSString *) camera;
- (CZcolour) colour;
- (int) Ram;
- (NSString *) camera;
- (void) calTo: (NSString *) phoneNum; // 打电话
- (void) takePhoto; // 拍照
@end
//CZIphone实现
1 #import "CZIphone.h"
2
3 @implementation CZIphone
4
5 - (void) setColour: (CZcolour) colour
6
7 {
8
9 _colour = colour;
10
11 }
12
13 - (void) setRam: (int) Ram
14
15 {
16
17 _ram = ram;
18
19 }
20
21 - (void) setCamera: (NSString *) camera
22
23 {
24
25 _camera = camera;
26
27 }
28
29 - (CZcolour) colour
30
31 {
32
33 return _colour;
34
35 }
36
37 - (int) Ram
38
39 {
40
41 return _ram
42
43 }
44
45 - (NSString *) camera
46
47 {
48
49 return _camera;
50
51 }
52
53 - (void) calTo: (NSString *) phoneNum
54
55 {
56
57 NSLog(@"给电话号码为%@的人打电话",phoneNum);
58
59 }
60
61 - (void) takePhoto
62
63 {
64
65 NSLog(@"拍照");
66
67 }
68
69 @end
// CZIphone2 声明
1 #import <foundation/foundation.h>
2
3 #import "CZIphone.h"
4
5 #import "CZIphone2.h"
6
7 @interface CZIphone2 : CZIphone
8
9 {
10
11 BOOL _flashLight;//闪光灯 YES:打开 NO:关闭
12
13 }
14
15 - (void) light;// 照明功能
16
17 @end
// CZIphone2 实现
#import "CZIphone2.h"
@implementation CZIphone2
- (void) light;// 照明功能
{
if(_flashLight == NO){
NSLog(@"请打开闪光灯");
_flashLight == YES
} else {
NSLog(@"闪光灯已经打开了");
}
}
//子类想使用打开闪光灯拍照的功能,需要重写父类方法
- (void) takePhoto
{ // 打开闪光灯
[self light];
[super takePhoto];
}
@end
三.可见性修饰符
1.@private : 私有的。只有本类中的方法可以访问它修饰的成员变量
注意点:
(1)父类中私有的成员变量,子类也会继承,只是没有权限访问
(2)子类中不可以定义与父类同名成员变量,哪怕是私有的
(3)在.m文件也可以定义成员变量,但是这个变量是私有的。无论使用什么可见性修饰符修饰它,都是私有的
2.@protected:受保护的。只能在本类和子类中可以访问它修饰的成员变量
3.@public: 公共的。在本类、子类、外部都可以访问它修饰的成员变量
4.@package:用在框架内部相当于@protected,用在框架外部相当于@private
四.多态
1.特点:一个对象多种形态
2.实现多态的必要条件
(1)必须基于继承
(2)父类指针指向子类对象
(3)子类要重写父类方法
3.多态的优点:
(1)提高代码灵活性
(2)提高代码可维护性
(3)提高代码复用性
代码演示:
//动物类声明
1 #import <foundation/foundation.h>
2 #import "CZAnimal.h"
3
4 @interface CZAnimal : NSObject
5
6 - (void) eat; //吃
7
8 @end
//动物类 实现
1 #import "CZAnimal.h"
2
3 @implementation CZAnimal
4
5 - (void) eat
6
7 {
8 NSLog(@"动物吃");
9 }
10
11 @end
// 声明狗类 继承动物类
1 #import "CZAnimal.h"
2 #inport "CZDog.h"
3
4 @interface CZDog : CZAnimal
5
6 - (void) bark; // 叫
7
8 @end
// 狗类实现
1 #inport "CZDog.h"
2
3 @implementation CZDog
4
5 - (void) bark
6
7 {
8
9 NSLog(@"狗叫");
10
11 }
12
13 - (void) eat
14
15 {
16
17 NSLog(@"狗吃");
18
19 }
20
21 @end
// 声明猫类 继承动物类
1 #import "CZAnimal.h"
2 #inport "CZCat.h"
3
4 @interface CZCat : CZAnimal
5
6 @end
// 猫类实现
1 #inport "CZCat.h"
2
3 @implementation CZCat
4
5 - (void) eat
6
7 {
8
9 NSLog(@"猫吃");
10
11 }
12
13 @end
//测试主程序
1 #import <foundation/foundation.h>
2 #import "CZAnimal.h"
3 #import "CZDog.h"
4 #import "CZCat.h"
5
6 int main(int argc ,char * argv[]){
7
8 CZAnimal * animal = [CZDog new];// 狗吃
9
10 CZAnimal * animal = [CZCat new]; // 猫吃
11
12 return 0;
13
14 }
五.description方法
1.NSLog使用%@输出一个对象的时候,就会调用这个对象的description方法
2.description方法在NSObject类中默认实现这个类的类名和地址
3.如果要输出对象的内容,需要重写description方法
-(NSString *) description
{
return [NSString stringWithFormat:@"格式化字符串",成员变量];
}
标签:
原文地址:http://www.cnblogs.com/ly0709/p/5049902.html