美文网首页
GeekBand OC 7. 多态

GeekBand OC 7. 多态

作者: robinn9810 | 来源:发表于2016-05-14 13:19 被阅读14次

运行时多态

重写override

重写方法

没有重写的方法会被重写

没有重写的方法中调用已经重写的方法会调用重写后的新方法而不是父类中的旧方法

把指针的声明类型Rectangle改成Shape也不会有任何影响,因为声明类型不重要,重要的是指针实际指向的类型

属性也可以重写,但本质上属性背后的访问器方法被override

重载

方法名相同,参数不同不可以共存

方法名(参数名)不同,参数相同可以共存

因此OC不支持方法重载

super仅指父类(Shape),没有多态性

相比之下,self有多态性,可以指向不同子类,即在不同的子类(Circle,Rectangle)中会调用各个子类的方法

内存模型

rect-》Rectangle Class(类)-》methodList-》各种方法(draw,print)

因此,多态调用涉及地址的动态辨析,但这种模式的代价是效率较低

继承中的初始化器和析构器

子类自动继承基类的初始化器

子类也可以重写基类的初始化器(如Shape重写了NSObject的初始化器,而Rectangle则重写了�Shape的初始化器)但此时必须手动调用基类的初始化器self=[super init];

析构器也可以继承或重写,子类析构器运行后会自动后置调用基类析构器,同时不可以手动调用

子类析构器也具有多态性

注意:避免在父类的init或dealloc中调用子类重写的方法,否则子类重写的init在继承基类的init时调用的是子类中重写后的方法,而重写后的方法中可能包含尚未在子类init中初始化的实例变量。而dealloc中也不要调用子类的方法,因为子类已经被释放

相关文章

  • GeekBand OC 7. 多态

    运行时多态 重写override 重写方法 没有重写的方法会被重写 没有重写的方法中调用已经重写的方法会调用重写后...

  • GeekBand-OC继承与多态

    面向对象三大特性:封装、继承、多态面向对象三大特性 继承 在OC中,继承为单继承。即每个类只能有一个父类,子类自动...

  • OC面向对象—多态

    OC面向对象—多态 OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没...

  • OC多态 - OC

    什么是多态:不同的对象以自己的方式响应相同名称方法的能力称为多态(父类指针指向子类对象) 多态的条件:有继承关系、...

  • OC多态

    面向对象的三大特性: 封装继承与多态;封装是对类中的一些字段, 方法进行保护, 不被外界所访问到, 有一种权限控制...

  • OC多态

    什么是多态:不同的对象以自己的方式响应相同名称方法的能力称为多态(父类指针指向子类对象)多态的条件:有继承关系、有...

  • OC:多态☀️

    版权声明:本文为博主原创文章,未经博主允许不得转载。 1、多态 父类指针指向子类对象 属性:封装了setter ...

  • OC -- 多态

    多态:同一种类型 具有多种的表现形态 多态的条件:必须存在继承关系子类重写父类的方法❗️父类声明的变量指向子类对象...

  • OC多态

    多态往简单来说就是父类的指针指向子类的对象。 //父类 @interfacesuperColor :NSObjec...

  • 多态

    OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态...

网友评论

      本文标题:GeekBand OC 7. 多态

      本文链接:https://www.haomeiwen.com/subject/mvrmrttx.html