13.3 Swift构造器之间的调用规则(构造器链)

13.3 Swift构造器之间的调用规则(构造器链),第1张

概述        /**          13.3-构造器之间的调用规则(构造器链).mp4          */                  /**          (3)构造器链-指定构造器和便利构造器之间的调用规则                    a 指定构造器必须调用其直接基类的指定构造器,不可以调用其直接基类的便利构造器。          b 便利构造器必须调用同类中定

/**

13.3-构造器之间的调用规则(构造器链).mp4

*/

/**

3)构造器链-指定构造器和便利构造器之间的调用规则

a 指定构造器必须调用其直接基类的指定构造器,不可以调用其直接基类的便利构造器。

b 便利构造器必须调用同类中定义的其它构造器(既可以是指定构造器也可以是便利构造器)。

c 便利构造器必须最终以调用一个指定构造器结束。

指定构造器总是向上代理

便利构造器总是横向代理。

*/

class AB {

var a:Int

var b:Int

// 指定构造方法,不允许出现构造器代理,self.init(...)

init(a:Int,b: Int) {

self.a = a

self.b = b

print("Class AB init!")

}

// 便利构造方法一定是通过调用其它的构造方法来实现初始化 self.init

convenIEnceinit(a: Int) {

// self.a = a

// b = 0

self.init(a: a,b:0)

}

convenIEnceinit(b: Int) {

// self.init(a: 2,b: 0)

self.init(a:8)

}

}

class CD:AB {

var c:Int

var d:Int

// 指定构造器 Designated

// 构造方法默认不会被继承,基类的存储属性只能通过基类的构造方法来初始化

init(c:Int,d: Int) {

// 派生类的引入的存储属性要先被初始化,然后在调用父类的构造方法对父类的属性进行初始化

self.c = c

self.d = d

// 基类的存储属性

super.init(a:0,b: 0)// 只能调用基类的指定构造器

// super.init(b: 0) // 不能调用基类的便利构造器

// 只能调用基类的指定(Designated)构造方法来对基类的属性进行初始化,不能调用便利(ConvenIEnce)构造方法

// super.init(b: 0)

}

// 便利构造器,只能通过调用本类中的构造器完成初始化,不允许出现super.init...

convenIEnceinit(a: Int,b:Int,c: Int,d:Int) {

// 可以调用

self.init(c: c,d: d)

// 不行

// self.c = c

// self.d = d

// super.init(a: a,b: b)

}

}





总结

以上是内存溢出为你收集整理的13.3 Swift构造器之间的调用规则(构造器链)全部内容,希望文章能够帮你解决13.3 Swift构造器之间的调用规则(构造器链)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1068010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存