Kotlin学习笔记(4)构造函数

1 Kotlin 使用 class 关键字声明类

//empty class
class ClassEmpty{

}
//如果一个类没有类体,可以省略花括号
class ClassEmptyNoBody

2 构造函数
一个类可以有一个主构造函数和多个次构造函数
主构造函数是类头的一部分,跟在类名后

class ClassConstructor constructor(arg: String){

}
//如果主构造函数没有任何注解或可见性修饰,可以省略 constructor 关键字
class ClassConstructorA(arg: String)
//修饰私有构造函数,则 constructor 关键字不可省略
class ClassConstructorB private constructor(arg: String)
//主构造函数不能包含代码,初始化代码可以放在init关键字的初始化块
class ClassConstructorC constructor(arg: String){
    private var name: String
    init {
        name = arg
        println("$name")
    }
}

3 初始化顺序
实例初始化期间,初始化块按照类体中顺序执行

class ClassConstructorD constructor(arg: String){
    val property1 = "1) property1 : $arg".also(::println)
    init {
        println("2) init block1 ${arg}")
    }
    val property2 = "3) property2 : $arg".also(::println)
    init {
        println("4) init block2 ${arg}")
    }
}

4 次级构造函数
如果类有一个主构造函数,次级构造函数需要委托给主构造函数
可以直接委托或者通过其他次构造函数间接委托

class ClassSecondaryConstructor constructor(arg: String){
    constructor(property1: String, property2: String) : this(property1) {

    }
    constructor(property1: String, property2: String, property3: String) : this(property1, property2) {

    }
}
//初始化块中代码实际上会成为主构造函数一部分
//委托给主构造函数会作为次构造函数的第一条语句
//即使没有主构造函数,这种委托扔会隐式发生
class ClassSecondaryConstructorA constructor(arg: String){
    init {
        println("primary init block")
    }
    constructor(property1: String, property2: String) : this(property1){
        println("secondary constructor")
    }
}
fun main(args: Array){
    //new class
    val obj1: ClassEmpty = ClassEmpty()
    val obj2: ClassEmptyNoBody = ClassEmptyNoBody()
    //构造函数初始化
    var obj3: ClassConstructorC = ClassConstructorC("hello kotlin")
    //构造函数初始化顺序
    println("构造函数初始化顺序====================================================")
    var obj4: ClassConstructorD = ClassConstructorD("kotlin")
    //主构造函数委托
    println("主构造函数委托====================================================")
    var obj5: ClassSecondaryConstructorA = ClassSecondaryConstructorA("hello", "kotlin")
}
hello kotlin
构造函数初始化顺序====================================================
1) property1 : kotlin
2) init block1 kotlin
3) property2 : kotlin
4) init block2 kotlin
主构造函数委托====================================================
primary init block
secondary constructor

你可能感兴趣的:(Kotlin学习笔记(4)构造函数)