Kotlin:对象

构造函数

主构造函数

class Person constructor(firstName:String){

}

如果没有注解或可见性说明constructor可以省略

主构造函数内不能有任意代码,初始化可以写在init修饰的代码块

class Customer constructor(){
    init{
        System.out.println("customer")
    }
}

构造函数的参数可以使用在init初始化代码块中

class Customer constructor(name:String){
    init{
        System.out.println("customer name = " + name)
    }
}

初始化时为内部成员变量赋值初始化值时也可以简写,如下

class Customer constructor(var name:String){
    fun showName(){
        System.out.println("show my name = " + name)
    }
}

如果主构造函数给参数设置了默认值,那么JVM会默认给该类生成一个无参数的构造函数,你可以直接创建无参的对象,参数的值,就是主构造函数的默认值

class Customer constructor(var name:String = "sss"){
    init {
        System.out.println("name = " + name)
    }
}

fun main(array: Array){
    var v = Customer()
}

二级构造函数

class Person {
    constructor(age:Int){
        System.out.println("show my name = " + age)
    }
}

如果在一个类有二级构造函数,又同时有一级构造函数,那么需要用二级构造函数代理一级构造函数使用this关键字
二级构造函数不能有声明val或var

class Person constructor(val name:String){

    init {
        System.out.println("init")
    }

    constructor(age:Int):this("ni da ye "){
        System.out.println("show my name = " + age + "show name = " + name)
    }
}
Kotlin:对象_第1张图片
image.png

注意这里 init代码块会先于二级构造函数执行,二级构造函数后面this参数先传入init代码块中,然后在传入二级构造函数中

一个非抽象类没有主构造函数和二级构造函数那么系统会自动分配他一个public的构造函数,如果你不想有构造函数那么你需要将类声明成私有的

class Student private constructor(){

}

你可能感兴趣的:(Kotlin:对象)