zoukankan      html  css  js  c++  java
  • iOS开发-继承特征详解

    面向对象的三大特性:封装,继承,多态。

    1、继承

    继承既能保证类的完整,又能简化代码

    公共的方法和实例变量写在子类子类只需要写父类独有的实例变量和方法即可。

    继承是面向对象三大特性之一,合理的继承,能减少很多冗余代码加快开发速度。

     1. 继承的特点:

      继承的上层:父类,继承的下层:子类

      继承的内容:所有实例变量和方法

      继承是单向的,不能相互继承。

      继承具有传递性:A继承与B,B继承与C,A具有B和C的特征和行为。

      如果子类不满意父类方法的实现,子类可以重写(overwrite)父类的方法。

     2. super

      super是编译器指令,并?对象。 

      作?:给super发消息,可以执??类该?法的实现 。

      重写从?类继承过来的?法的三种情况:

       • 完全以?类的实现内容为主,丢弃?类实现的内容。  

       • 完全以?类的实现内容为主,没有?类实现的内容。

       • 既有?类对该?法的实现,也有?类对该?法的实现。

     3.消息发送机制

    2、初始化方法

     1.初始化方法

      初始化?法的主要作?是:为某些实例变量赋初值。 

      初始化?法在对象的整个?命周期?只使??次。 

      :初始化?法是在对象的初始化阶段完成其实例变量的赋值操作,?个对象的初始化阶段只有?次,所以初始化?法只使??次

     1 - (id)init {
     2   //给super发送init消息:执??类中实现的init?法
     3   self = [super init];
     4   //判断从?类继承过来的init?法是否初始化成功
     5   if (self) {
     6   //初始化设置
     7   }
     8   //返回初始化完成的对象
     9   return self;
    10 } 

      ?类定义了除?类中公共实例变量之外的实例变量。 

      在??的初始化?法中,优先向super发送init消息,初始化公共变量, 初始化成功之后,再初始化??特有变量,从?完成全部实例变量的初始化。

     2.self

      self是系统关键字。 self?法中指代当前?法的调?者。 

      self实例?法中,指代调?当前?法的对象

      - (void)objectMethod {
    
      }

      self类?法中,指代当前

    + (void)classMethod {
    
    }

     3. 初始化方法特征

      • 初始化?法是 "_"?法。

      • id 或者 instancetype 类型的返回值。 

      • 以init开头。 

      • 可以带 多个参数。 

      内部实现:先执?super的初始化?法,再初始化??变量,后return self

     4. 初始化过程

    • ??的初始化?法中,优先调??类的初始化?法。 
    • ?类的初始化?法中调??类的初始化?法,依次往上调?。 
    • 处于最上层的初始化完成之后,回到第?层的初始化?法中, 完成第?层的初始化。 
    • 第?层的初始化完成之后,回到第三层的初始化?法中,依次执?初始化?法,直到本类的初始化?法完成

     5. 指定初始化方法

      命名规则:以initWith开头,后面跟上参数列表

    1 - (id)initWithName:(NSString *)name gender:(NSString *)gender {
    2     self = [super init];
    3     if (self) {
    4         _name = name;
    5         _gender = gender;
    6     }
    7     return self;
    8 }

    3、便利构造器

     1. 封装了对象创建过程 

      内部实现:封装alloc初始化操作,创建对象更加简便快捷

     2. 特征

      • 便利构造器是 "+" ?法。 

      • 返回本类型的实例。 

      • ?法名以类名+ With + 参数列表。 

      • 可以有 多个参数。

     3. 便利构造器声明,实现和调用

      声明:

     1    + (id)personWithName:(NSString *)name gender:(NSString *)gender;             

      实现:

    1 + (id)personWithName:(NSString *)name gender:(NSString *)gender {
    2 
    3     return [[Person alloc] initWithName:namegender:gender];
    4 
    5 } 

      调用:

     1 Person *per = [Person personWithName:@"Frank" gender:@""];                       

  • 相关阅读:
    【洛谷 P5357】 【模板】AC自动机(二次加强版)(AC自动机,差分)
    【洛谷 P1659】 [国家集训队]拉拉队排练(manacher)
    【洛谷 P3224】 [HNOI2012]永无乡(Splay,启发式合并)
    HNOI2019退役祭
    类欧几里得算法模板
    乘法逆元模板
    $Luogu$ $P3130$ $[USACO15DEC]$ 计数 $Counting$ $Haybales$
    $Luogu$ $P2746$ $[USACO5.3]$ 校园网 $Network$ $of$ $Schools$
    $Luogu$ $P2243$ 电路维修
    $Luogu$ $P4667$ $[BalticOI$ $2011$ $Day1]$ 打开灯泡 $Switch$ $the$ $Lamp$ $On$
  • 原文地址:https://www.cnblogs.com/melons/p/5791775.html
Copyright © 2011-2022 走看看