zoukankan      html  css  js  c++  java
  • Swift构造器链

    IDE:Xcode Version7.3.1

    指定构造器:

      1>名字为init的方法前没有前缀(子类重写时有override除外),

      2>一个类中至少有一个指定构造器,其必须初始化类中的所有实例存储属性

     便利构造器:

      1>前缀为convenience的init方法,便利构造器属于次要的,辅助性的构造器.

      2>便利构造器必须调用同一个类中的其他构造器完成其初始化.

      3>只有类中才有便利构造器,枚举结构体中是没有的.

    构造器链:(即构造器之间的调用)

      1>指定构造器总是向上调用父类的构造器(如果有父类)

      2>便利构造器总是横向调用当前类的其他构造器

      3>构造器链的最终节点一定是父类的指定构造器(如果有父类)

             

        

      

    class Fruit{
        var name:String
        var weight:Double
          //定义指定构造器 最少一个且这一个要负责初始化勒种所有的实例存储属性
        init(name:String){//①
            self.name = name
            self.weight = 0.0
        }
        //定义便利构造器
        convenience init(name:String,weight:Double){//②
            //调用本类中的①号指定构造器
            self.init(name:name)
            self.weight = weight
        }
        //定义另一个便利构造器 有外部参数
        convenience init(n name:String,w weight:Double){//③
            //调用本类的②号便利构造器
            self.init(name:name)
        }
    }
    
    class Apple:Fruit{
        var color:String
        init(name:String, weight:Double, color:String){//④
                //指定构造器必须先向上调用父类构造器,然后才能对继承得到的属性赋值
              //  self.name = "123"//会报错,因为还没有调用父类的构造器
            //       print("color:\(self.color)")//报错 因为还没有初始化
            self.color = color
            print("color:\(self.color)")//初始化了 ok了
            //子类的指定构造器必须调用父类的指定构造器,此处调用父类①号构造器
            super.init(name: name)
            self.weight = weight
        }
        init(){//⑤
            //指定构造器必须先初始化当前类中定义的实例存储属性(子类的独有属性),然后才能向上调用父类构造器
            self.color = ""//这一行如果写在super.init(name:"")后面就会报错
            //子类指定构造器必须调用父类的指定构造器,此处调用父类①号构造器
            super.init(name: "")
            self.weight = 0.0
        }
        //定义一个便利构造器
        convenience init(name:String,color:String){//⑥
            //调用本类中④号指定构造器
            self.init(name:name,weight:0.0,color:color)
        }
        //定义另一个便利构造器
        convenience init(n name:String,c color:String){//⑦
            //调用本类中⑥便利构造器
            self.init(name:name,color:color)
        }
    }
    
  • 相关阅读:
    【TYVJ1728】【洛谷P3369】—普通平衡树(Splay写法)
    【BZOJ2388】—旅行规划(分块+凸包)
    【BZOJ3674】—可持久化并查集加强版(可持久化并查集)
    【模板】树链剖分+换根
    【CQOI2007】【BZOJ1257】【洛谷P2261】余数求和(整除分块)
    Old Driver Tree(ODT 老驱动树)
    【CodeForces-896C】— Willem, Chtholly and Seniorious(ODT老驱动树)
    【BZOJ2238】—MST(树链剖分+最小生成树)
    13.PHP_ThinkPHP
    Win64 驱动内核编程-33.枚举与删除对象回调
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/5528861.html
Copyright © 2011-2022 走看看