objective-C学习笔记(六)继承与多态

封装 encapsulation

    隐藏对象内部实现细节,对外仅提供公共接口访问。

    (说白了就是属性啊,方法啊全都写在类内,对外只提供访问,不需要了解细节)

继承 inheritance

    一个类型在另外类型基础上进行的扩展实现。

多态 polymorphism

    不同类型针对同一行为接口的不同实现方式。

OBJC的继承

【单继承】每一个类只能有一个基类,子类自动继承基类的:

     ·实例变量

     ·属性 

     ·实例方法

     ·类方法

     了解所有类的根类:NSObject

  继承的两层含义:

     成员复用: 子类复用基类成员

     类型抽象: 将子类当作父类来使用(IS-A关系准则)

  在子类的对象内存中,可以找到一个完全的父类对象内存。

  继承中的init和dealloc

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

      子类也可以重写基类初始化器,此时子类初始化器必须首先调用基类的一个初始化器(手工调用 self = [super init];)。

      子类可以选择继承基类析构器,或者重写基类析构器。

      子类析构器执行完毕以后,会自动调用基类析构器(后置调用,且不支持手工调用 [super dealloc]会报错,除非关闭ARC)。

      子类析构器自动具有多态性。  

   Tips:尽量避免在父类init和dealloc中调用子类重写的方法。因为子类在初始化的时候,会自动前置调用父类的初始化器,而父类的初始化器里面调用子类重写方法的话,子类都还没有初始化完毕,这个方法就会报错。析构器也是一样,因为子类重写的析构器,会在最后调用父类的基析构器(后置调用),这时候父类析构器里还有调用子类的方法的话,那些内存早就已经被释放掉了,直接回报错。

 多态 运行时多态 Polymorphism

   子类在父类统一行为接口下,表现不同的实现方式。

   重写与重载

       重写:(与父类同名同参数方法)子类可以重写父类的方法。

       重载:(与父类同名不同参数方法)OBJC不支持方法重载,

               外部参数不同就直接是另一个方法;外部参数相同而内部参数不同(参数名或者类型)会直接报错。

   继承自父类的方法,需要重写的话,直接在实现类上重写就可以了,不需要重新在接口类中声明。

   self和super

   self具有多态性,可以指向不同子类

   super没有多态性,仅指向当前父类

    

posted @ 2016-03-24 18:32  dom075  阅读(255)  评论(0编辑  收藏  举报