13.4 Swift派生类构造方法的两段式构造
2016-12-22 10:50
218 查看
/**
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("类B第二阶段初始化开始")
if b >
100 {
self.a =
1000
}
testFun()
}
}
class C:
B {
var c:
Int
init(a:
Int, b: Int, c:
Int) {
// 派生类引入的属性进行初始化
print("类C第一阶段初始化开始")
self.c = c
// 父类的指定构造方法对父的属性进行初始化
super.init(a: a, b: b)
print("类C第二阶段初始化开始")
if c >
100 {
self.a =
1000
self.b =
1000
}
}
}
class D:
C {
var d:
Int
init(a:
Int, b: Int, c:
Int, d: Int) {
// 派生类引入的属性进行初始化
print("类D第一阶段初始化开始")
self.d = d
super.init(a: a, b: b, c: c)
print("类D第二阶段初始化开始")
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第二阶段初始化开始
*/
/**
可以防止属性在被初始化之前访问,也可以防止属性被另外一个构造器意外的赋值。
*/
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("类B第二阶段初始化开始")
if b >
100 {
self.a =
1000
}
testFun()
}
}
class C:
B {
var c:
Int
init(a:
Int, b: Int, c:
Int) {
// 派生类引入的属性进行初始化
print("类C第一阶段初始化开始")
self.c = c
// 父类的指定构造方法对父的属性进行初始化
super.init(a: a, b: b)
print("类C第二阶段初始化开始")
if c >
100 {
self.a =
1000
self.b =
1000
}
}
}
class D:
C {
var d:
Int
init(a:
Int, b: Int, c:
Int, d: Int) {
// 派生类引入的属性进行初始化
print("类D第一阶段初始化开始")
self.d = d
super.init(a: a, b: b, c: c)
print("类D第二阶段初始化开始")
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第二阶段初始化开始
*/
/**
可以防止属性在被初始化之前访问,也可以防止属性被另外一个构造器意外的赋值。
*/
相关文章推荐
- 14--swift之派生类构造方法
- C#高级(五)继承,派生类,派生类的构造方法
- c#基础-继承,派生类,派生类的构造 方法
- swift构造方法
- 12.1 Swift构造方法初印象
- swift:字典转模型构造方法
- C#高级(五)继承,派生类,派生类的构造方法
- 12.5 Swift可选属性与构造方法
- Swift 基础学习(指定构造方法和便利构造方法)
- 12.3 Swift带有参数的构造方法
- IOS学习笔记05_1-Swift-如何定义类和类的构造方法、重载方法
- swift UIImageView构造方法
- Swift 中 ViewController 默认构造方法不关联同名的xib文件
- Swift中构造方法的解析
- swift构造方法
- 派生类的构造方法
- 基于iOS开发对Swift构造方法的感悟
- swift构造方法
- 深入解析Swift编程中的构造方法
- 12.4 Swift常量存储属性与构造方法