Kotlin教程:构造函数——创建对象时初始化变量

2020-04-2311:29:31编程语言入门到精通Comments3,268 views字数 3341阅读模式

Kotlin中,构造函数是一个类似于方法的代码块。 声明构造函数的名称与类的名称相同,后跟括号()。 构造函数用于在创建对象时初始化变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

Kotlin构造函数的类型

Kotlin中有两种类型的构造函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

  • 主构造函数
  • 辅助构造函数

Kotlin类中只有一个主要构造函数,而辅助构造函数可以是一个或多个。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

Kotlin主构造函数

主构造函数用于初始化类,它在类标题中声明。 主构造函数代码由带有可选参数的括号括起。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

下面来看看一个主构造函数声明的例子。 在下面的代码中,我们声明了一个带有两个参数:nameid的构造函数myClass。 参数name是只读属性,而id是读取和写入属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

class myClass(valname: String,varid: Int) {  
    // class body  
}
Kotlin

当创建myClasss的对象时,分别使用:Susen10010这两个值来初始化nameid属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

class myClass(val name: String, var id: Int) {
}
fun main(args: Array<String>){
    val myclass = myClass ("Susen", 10010)

    println("Name = ${ myclass.name}")
    println("Id = ${ myclass.id}")
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

Name = Susen
Id = 10010
Shell

初始化块的主构造函数

主构造函数不包含任何代码,初始化程序块用于初始化代码。 该块是以init关键字为前缀。 在实例初始化期间,初始化块的执行顺序与它们在类体中出现的顺序相同。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

下面使用初始化块重写上面的代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

class myClass(name: String, id: Int) {
    val e_name: String
    var e_id: Int
    init{
        e_name = name.capitalize()
        e_id = id

        println("Name = ${e_name}")
        println("Id = ${e_id}")
    }
}
fun main(args: Array<String>){
    val myclass = myClass ("Maxsu", 10010)

}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

Name = Maxsu
Id = 10010
Shell

在上面的代码中,参数nameid在创建myclass对象时接受值分别是:Maxsu10010。 声明nameid属性时没有valvar,因此它们不是myClass类的属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

当创建myClass类的对象时,它将执行初始化块,初始化namee_id文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

Kotlin辅助构造函数

Kotlin在类中创建一个或多个辅助构造函数。 使用constructor关键字创建辅助构造函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

下面来看一个辅助构造函数声明的示例。在下面的代码中,我们声明了myClass的两个构造函数,它有两个参数:nameid文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

class myClass{  

    constructor(id: Int){  
        //code   
    }  
    constructor(name: String, id: Int){  
        //code   
    }  
}
Kotlin

让我们看一下辅助构造函数在创建类的对象时分配值的示例。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

class myClass{

    constructor(name: String, id: Int){
        println("Name = ${name}")
        println("Id = ${id}")
    }
}
fun main(args: Array<String>){
    val myclass = myClass ("Maxsu", 10010)

}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

Name = Maxsu
Id = 10010
Shell

也可以在同一个类中使用主和辅助构造函数。 通过在同一个类中使用主和辅助构造函数,辅助构造函数需要授权给主构造函数。 使用this()关键字对同一个类中的另一个构造函数进行授权。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

class myClass(password: String){

    constructor(name: String, id: Int, password: String): this(password){
        println("Name = ${name}")
        println("Id = ${id}")
        println("Password = ${password}")
    }
}
fun main(args: Array<String>){
    val myclass = myClass ("Maxsu", 101, "passwd123")

}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

Name = Maxsu
Id = 101
Password = passwd123
Shell

从同一个类的一个辅助构造函数调用另一个辅助构造函数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

在Kotlin中,一个辅助构造函数可以调用同一个类的另一个辅助构造函数。 可通过使用this()关键字完成的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

class myClass{

    constructor(name: String, id: Int): this(name,id, "mypassword"){
        println("第二个执行")
        println("Name = ${name}")
        println("Id = ${id}")
    }

    constructor(name: String, id: Int,pass: String){
        println("第一个执行")
        println("Name = ${name}")
        println("Id = ${id}")
        println("Password = ${pass}")
    }
}
fun main(args: Array<String>){
    val myclass = myClass ("Maxsu", 10010)
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

第一个执行
Name = Maxsu
Id = 10010
Password = mypassword
第二个执行
Name = Maxsu
Id = 10010
Shell

从派生类辅助构造函数调用超类辅助构造函数
在Kotlin中,一个派生类的辅助构造函数可以调用基类的辅助构造函数。可使用super关键字完成的,它是继承的概念。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

open class Parent{

    constructor(name: String, id: Int){
        println("第一个执行")
        println("Name = ${name}")
        println("Id = ${id}")
    }

    constructor(name: String, id: Int,pass: String){
        println("第三个执行")
        println("Name = ${name}")
        println("Id = ${id}")
        println("Password = ${pass}")
    }
}
class Child: Parent{
    constructor(name: String, id: Int): super(name,id){
        println("第二个执行")
        println("Name = ${name}")
        println("Id = ${id}")
    }

    constructor(name: String, id: Int,pass: String):super(name,id,"password"){
        println("第四个执行")
        println("Name = ${name}")
        println("Id = ${id}")
        println("Password = ${pass}")
    }
}
fun main(args: Array<String>){
    val obj1 = Child("Susen", 10010)
    val obj2 = Child("Susen", 10010,"mypassword")
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

第一个执行
Name = Susen
Id = 10010
第二个执行
Name = Susen
Id = 10010
第三个执行
Name = Susen
Id = 10010
Password = password
第四个执行
Name = Susen
Id = 10010
Password = mypassword

//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/kotlin/kotlin-constructor.html#article-start文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18297.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/18297.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定