首页 > 代码库 > 黑马程序员—14-oc的继承

黑马程序员—14-oc的继承


  

一、    继承概念

 继承用在类于类之间,子类可以拥有父类所有变量成员和方法。

 子类跟父类不能有相同的成员变量,方法实现可以相同

 子类重写父类的某个方法,代表着重写

 注意点:

1.   父类声明必须写在子类前面

2.  子类不能拥有和父类相同的成员变量

3.  调用某个对象的方法时,优先去当前对象中寻找,如果找不到去父类中寻找

4.    坏处就是耦合性太强,就是两个类之间关系太紧密

二、    继承的使用场合

Ø  当两个类拥有相同属性方法的时候,就可以将相同的东西抽取到一个父类中

Ø  当A类拥有B类中的属性和方法时,就可以考虑让B类,就可以考虑让B类继承A类

 

u  继承跟组合

继承   xx拥有xxx

组合   xxx拥有xxx

三、    Super的作用

Ø  直接调用父类中的某个方法

Ø  Super处在对象方法中,就会调用父类的对象方法,super处在类方法中,那么就会调用父类的类方法

Ø  使用在子类重写父类的方法,想保留父类的某些行为

四、    继承的基本使用

#import<foundationg/foundation.h>

//Animal 的声明

@interface Animal : NSObject

{

int  _age ;

double_weight;

}

 

- (void) setAge : (int) age;

- (int) age;

 

- (void) setWeight : (double) weight

- (double) weight;

@end

//Animal的实现

@ implementation Animal

- (void) setAge :(int) age

{

_age= age;

}

- (int) age

{  

Return_age;

}

 

- (void) setWeight : (double) weight

{

_weight= weight;

}

- (double) weight

{

return  _weight;

}

@end

//Dog类,继承了Animal

# import<Foundation/Foundation.h>

@interface Dog : Animal

@end

@implementation Dog

@end

//Cat类,继承了Animal

# import<Foundation/Foundation.h>

@interface Cat : Animal

@end

@implementation Cat

@end

 

int main()

{

Dog* dog = [Dog  new] ;

[dog  setAge : 10]

 

Cat* cat = [Cat  new];

[cat       setWeight: 10];

 

NSLog(@”age = %d,weight = %d”,[Dog   age],[Cat    weight]);

 

return0;

}

输出结果:age = 10 ,weight= 10

上面例子类之间的关系可用下图表示:

技术分享

五、    组合的基本使用

定义一个成绩类

#import<Foundation/Foundation.h>

 

@interface Score:NSObject

{

int _ c_Score;

int _ oc_Score;

}

@end

@implementationScore

@end

 

//定义一个学生

#import<Foundation/Foundation.h>

 

@interface Person: NSObject

{

Score * _score;

int _ age;

}

@end

@implementationPerson

@end

六、    super的基本使用

#import <Foundation/Foundation.h>

//僵尸(父类)

@interface Zoombie : NSObject

- (void)walk;

+ (void)test;

- (void)test;

@end

@implementation Zoombie

- (void)walk

{

    NSLog(@"往前走两步");

}

+ (void)test

{

    NSLog("test类方法被调用了");

}

- (void)test

{

    NSLog("test对象方法被调用了");

}

@end

 

//跳跃僵尸(子类)

@interface JumpZoombie : Zoombie

+ (void)test2;

@end

@implementatioon :JumpZoombie

+ (void)test2

{

    [supertest];

}

- (void)walk

{

    //要求先跳一下

    NSLog(@"先跳一下");

 

    //再走两步,使用super调用父类的walk方法

    [superwalk];

}

@end

 

int main()

{

    JumpZoobie *jz = [JumpZoobie new];

    [jzwalk];

    [jztest2];

    return0;

}

输出结果:先跳一下

           往前走两步

           test类方法被调用了

黑马程序员—14-oc的继承