OC三大特性之继承和多态

来源:互联网 发布:比尔 拉塞尔 知乎 编辑:程序博客网 时间:2024/05/23 00:07

一、继承

    1.概念:程序里的继承子类继承了父类,那么子类就拥有父类中的所有成员变量和方法,这跟现实中的狗是动物的一种,狗也具备了动物                   所必备的属性,更符合我们的理解。

    2.继承的好处与缺点:

1>抽取出了重复的代码

2>建立了类和类之间的联系

继承的缺点:耦合性太强

    3.继承的实例

@interface Animal:NSObject// 动物里继承了NSObject,获得NSObject类的方法;{    int _age;    int _weight;}    // setter和getter    ......@end@interface Dog :Animal// dog类继承Animal类,并获得了父类的所有方法和属性@end
    原理图

    
    注意:OC语言是单继承语言。在oc语言中,基本上所有类的根类都是NSObject类。

二、继承与组合

    继承的适用场合:

1>当两个类拥有相同的属性和方法时,就可以将相同的属性和方法抽取到一个父类中。

2>当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类(考虑),在这种情况下,也可以考虑使用组合。

继承:xx是xxx,如狗是动物,可以让狗继承动物类

组合:XXX拥有xxx,如学生有书,可以让书这个类作为学生类的属性

三、重写和super

    1.重写概念:子类重新实现父类中的某个方法(对某个方法重新实现),覆盖父类某个方法以前的做法。
    2.使用场合:

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

2>当A类有用B类中的部分属性和方法时,可以考虑让B类继承A类。

    3. super用法:子类调用父类中的某个方法
super处于对象方法中时,那么就会调用父类的对象方法
super处于类方法中时,那么就会调用父类的类方法
         使用场合:子类重写父类的方法时想要保留父类的一些行为

            (子类可以直接调用父类中的某个方法 [super 方法名])

    4. super重写方法

 - (void)walk // 重写父类的walk方法{    NSLog("跳两下");    [super walk]; // 调用父类的walk方法}

四、多态

    1.基本概念

多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。

在使用多态是,会进行动态检测,以调用真实的对象方法。

多态在代码中的体现即父类指针指向子类对象。

    2.代码体现

Animal  *a=[dog new];//Animal是父类,dog是子类 , 狗是动物

错误写法:Dog *d=[Animal new]; // 动物不一定是狗,也可能是猫

    3.优缺点

    优点:节省了代码,提高了效率。

如果方法或函数参数中使用的是父类类型,则可以使用父类指针传入父类和子类对象。

         void feed(Animal *a) // 定义喂动物的函数。
         {
               [a eat];
         }
         解析:上述函数的形参是父类Animal,所以此函数可以传入父类和子类。
    局限性:

父类类型的指针不能调用子类的方法。(必须将父类指针强制转化为子类指针时才能调用子类中方法)

Animal  *a=[dog new];            

Dog *d = (dog *) a; // 将父指针a强制转化为子类指针d


0 0
原创粉丝点击