Objective-C继承与多态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C继承与多态相关的知识,希望对你有一定的参考价值。

  • 类的继承关系

复合关系:has a

继承关系:is a

     

思考这个问题:

     在编写猫类和狗类时,会发现这两个类中有大量相同或者类似的属性及方法。

     将动物都共有的属性及方法放在一个动物类中,并让狗类和猫类都继承自动物类

     狗类和猫类分别实现自己特有的属性及方法


B继承A == A派生B

     A称作父类或基类,B称作子类或派生类

     B包含A的所有属性及方法


继承关系在接口部分指定:

     @interface className:parentClassName

     ...

     @end

     NSObject是所有OC类的基类,被称作“超类”


只能继承一个 --- 单继承

     某些语言,如C++,可以多重继承,即一个类可以有多个父类,OC并不支持多重继承

     C++中支持多种继承方式的指定,即在继承时可以指定public、protected、private以确定父类中的成员在子类的中的访问权限,OC也不支持多种继承方式。

     虽然OC并不支持多继承,但OC中使用“协议”实现了多继承的一部分功能。

其他说明:

     OC中不允许子类与父类拥有相同名字的属性

     子类调用方法时,是先在当前类中找,找不到再到父类中找

     子类可以重写父类的方法,即覆盖了父类的方法

     父类中的@protected属性在子类方法中可以访问,但@private的不能。


继承的工作原理:

    技术分享

    isa是超类NSObject中的成员变量,它指向该类型的类对象


在对象的方法中,self指针指向当前对象

     通过self指针可以访问对象的属性及调用方法

在对象的方法中,super指针指向当前对象的父类部分

     通过super指针可以访问父类的属性及调用方法(尤其是被覆盖的方法)


  • 重新父类方法

子类中包含父类的所有属性及方法,其中父类的方法可以在子类中进行重写。

     重写要求:方法名、参数、返回值与父类方法一致。

     如:重写description方法能够,能在NSLog以%@输出时,输出指定的字符串。

重写父类方法时,有时需要执行父类的动作,则使用super指针指定调用父类的方法。


  • 多态

父类指针存储子类对象地址时,调用方法时出现的情况

     相同消息给与不同的对象会引发的不同动作


调用对象方法时会检测对象的真实方法

OC中已经实现了方法的多态


注意:让子类指针指向父类对象 是不安全的做法


多态的好处:

     用一份代码代替很多份代码(如函数传递基类指针)


多态的局限性:

     父类类型的指针变量是不能用来调用子类的方法 (有时虽然能成功但不推荐)

     如果需要,则应将父类指针转换为子类指针后再调用子类的方法


  • 多态指针

父类对象指针可以存储子类对象的地址,这样的指针被称作多态指针

     多态指针经常用作参数、返回值等

id就是OC中最常使用的多态指针类型,相当于NSObject*

另外一个类型 instancetype,也可以认为是id类型

     但只用在一些方法的返回值上,比id类型多了一个类型检查的功能。

为一个对象指针赋空值时,应当使用nil,而对一个非OC对象指针赋值时,应当使用NULL。





本文出自 “teacherAn” 博客,请务必保留此出处http://annmeng.blog.51cto.com/3321237/1745611

以上是关于Objective-C继承与多态的主要内容,如果未能解决你的问题,请参考以下文章

Python类的继承与多态详细介绍

Objective-C中的封装继承多态分类

Java编程 实现类的继承与多态 写一个动物类。成员变量为动物的种类,成员方法是动物叫声。

Python面向对象编程之继承与多态详解

C++编程题 关于 继承和多态 的

python基础之继承原理,多态与封装