黑马程序员—继承与多态

来源:互联网 发布:梓潼淘宝运营招聘 编辑:程序博客网 时间:2024/05/21 22:35

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.继承

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(先抽取weight属性,再抽取eat方法

// 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.子类方法和属性的访问过程:如果子类没有,就去访问父类的;

3.父类被继承了还是能照常使用的;

4.NSObject的引出:全部OC类的最终父类,包含了一些常用方法;

5.继承的专业术语:父类\超类  superclass;子类 subclass\subclasses;

6.继承的细节:单继承;子类和父类不能有相同的成员变量;方法的重写;

7.super关键字:分别调用父类的对象方法和类方法;

@interface Zoombie : NSObject- (void)walk;+ (void)test;- (void)test;@end@implementation Zoombie- (void)walk{    NSLog(@"往前挪两步******");}+ (void)test{    NSLog(@"Zoombie+test");}- (void)test{    NSLog(@"Zoombie-test");}@end// 跳跃僵尸@interface JumpZoombie : Zoombie+ (void)haha;- (void)haha2;@end@implementation JumpZoombie+ (void)haha{    [super test];}- (void)haha2{    [super test];}- (void)walk{    // 跳两下    NSLog(@"跳两下");        // 走两下(直接调用父类的walk方法)    [super walk];    //NSLog(@"往前挪两步----");}@endint main(){    //[JumpZoombie haha];    JumpZoombie *jz = [JumpZoombie new];        [jz haha2];        return 0;}


8.继承的好处

   不改变原来模型的基础上,拓充方法;

   建立了类与类之间的联系;

   抽取了公共代码;

   坏处:耦合性强;

9.继承的使用场合

   它的部分属性是你想要的,可以抽取出另一个父类;

   当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类

A {    int _age;    int _no; }  B : A {    int _weight; }


二.多态

1.多态的基本概念

   某一类食物的多种形态;OC对象具有多态性


2.多态的体现

Person *p = [Student new];p->age = 100;[p walk];

子类对象赋值给父类指针;

父类指针访问对应的属性和方法;


3.多态的好处

   用父类接收参数,节省代码;


4.多态的局限性

   父类类型的变量不能直接调用子类特有的方法.必须强转为子类类型变量后,才能直接调用子类特有的方法;

 /*    Animal *aa = [Dog new];    // 多态的局限性:父类类型的变量 不能 用来调用子类的方法    //[aa run];        // 将aa转为Dog *类型的变量    Dog *dd = (Dog *)aa;        [dd run];    */


5.多态的细节

   动态绑定:在运行时是根据对象的类型确定动态调用的方法



------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0
原创粉丝点击