加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

13.4 Swift派生类构造方法的两段式构造

发布时间:2020-12-14 06:31:20 所属栏目:百科 来源:网络整理
导读:/** 13.4- 派生类构造方法的两段式构造 */ /** 两段式构造-构造过程可以划分为两个阶段 第一阶段,确保所有的存储属性都初始化完毕, 第二阶段,对父类中的存储属性做进一步的处理。 可以防止属性在被初始化之前访问,也可以防止属性被另外一个构造器意外的

/**

13.4-派生类构造方法的两段式构造

*/

/**

两段式构造-构造过程可以划分为两个阶段

第一阶段,确保所有的存储属性都初始化完毕,

第二阶段,对父类中的存储属性做进一步的处理。

可以防止属性在被初始化之前访问,也可以防止属性被另外一个构造器意外的赋值。

*/

class A {

var a: Int

init(a: Int) {

self.a = a

}

}

class B: A {

var b: Int

func testFun() -> Void {

print("testFun")

}

init(a: Int,b: Int) {

// 派生类引入的属性进行初始化

print("B第一阶段初始化开始")

self.b = b

/** 第一阶段

1)不可以访问父类中的属性

2)不可以调用成员方法

*/

// testFun()

// 父类的指定构造方法对父的属性进行初始化

super.init(a: a)

print("第二阶段初始化开始")

if b > 100 {

self.a = 1000

}

testFun()

}

}

class C: B {

var c: Int

init(a: Int,b: Int,c: Int) {

C第一阶段初始化开始")

self.c = c

// 父类的指定构造方法对父的属性进行初始化

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


print("第二阶段初始化开始")

if c > 100 {

self.a = 1000

self.b = 1000

}

}

}

class D: C {

var d: Int

init(a: Int,c: Int,d: Int) {

D第一阶段初始化开始")

self.d = d

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

print("第二阶段初始化开始")

if d > 1000 {

self.a = 1000

self.b = 1000

self.c = 1000

}

}

}

var d = D.init(a: 0,b: 0,c: 0,d: 0)

/**

D第一阶段初始化开始

C第一阶段初始化开始

B第一阶段初始化开始

B第二阶段初始化开始

C第二阶段初始化开始

D第二阶段初始化开始

*/

/**

*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读