码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员-OC学习日记-继承、多态

时间:2015-12-16 00:27:46      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

 ------- ios培训、 android培训、java培训、期待与您交流! ----------

一.两个关键字selfsuper

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:@"格式化字符串",成员变量];

 }

 

 

 

黑马程序员-OC学习日记-继承、多态

标签:

原文地址:http://www.cnblogs.com/ly0709/p/5049902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!