Kotlin系列之从构造方法

上一节说到了Kotlin中的主构造方法和初始化语句块,今天来看看Kotlin中的从构造方法。

在Java中的问题

在Java中,我们有时候为了用不同的参数来创建一个对象,就会声明多个构造方法,也就是构造方法的重载。然后我们可能会让某些构造方法的某些参数为默认值。在Java中是没有主构造方法和从构造方法的概念的,都叫构造方法,就像下面这样。

Java代码

public class User {

    private String mName;

    private int mAge;
    public User(String nickname){
        this.mName = nickname;
        this.mAge = 10;
    }

    public User(String nickname, int age){
        this.mName = nickname;
        this.mAge = age;
    }
}

上面的代码的mAge属性在我们不传入时使用默认值10。这样的场景在我们编程中经常遇到,那么在Kotlin中我们又该怎么写呢。

Kotlin中的从构造方法

我们先复习一下Kotlin中的主构造方法和从构造方法的区别。
主构造方法是主要而简洁的初始化类的方法,声明在类的外部。
从构造方法是声明在类内部的初始化类的方法。
就如下面的这样。

Kotlin代码

//主构造方法
open class User(val isMan: Boolean){

    //从构造方法
    constructor(nickname: String) : this(true) {

    }

    //从构造方法
    constructor(nickname: String, age: Int) : this(true) {

    }
}

fun main(args: Array<String>){
    val user =  User("小米", 12);
}

上面的主构造方法使用了val关键字,这样就是在声明主构造方法的时候为该类声明了一个属性isMan
上面定义在类内部的就是从构造方法,为了实现用不同的参数初始化对象,这里定义了两个从构造方法。有人可能对上面的this的使用存在疑问。上面的this与Java中一样,用于在同一个类中调用其他的主构造方法或者从构造方法。

还有一个疑问,: this(true)这个可以不写吗?答案是不可以。因为我们定义了主构造,所以Kotlin中限定我们的从构造方法必须要直接或者间接委托给主构造方法,也就是我们也可以委托给另一个从构造方法,但委托链的最终要委托给主构造方法。

就像下面这样

Kotlin代码

//主构造方法
open class User(val isMan: Boolean){

    //从构造方法
    constructor(nickname: String) : this(true) {

    }

    //从构造方法
    constructor(nickname: String, age: Int) : this(nickname) {

    }
}

代码中constructor(nickname: String, age: Int)委托了 constructor(nickname: String),然后constructor(nickname: String)又委托给了主构造方法,在这条委托链的末端就是主构造方法。

写在最后

今天的内容很少,就只是单纯说说Kotlin中的从构造方法,这在Java中是没有这个概念的,同时他还介绍了从构造方法的委托规则。

阅读更多

扫码向博主提问

codekongs

夫唯不争,故莫能与之争。
  • 擅长领域:
  • Android
  • Java
  • Kotlin
  • 情感
  • 心理学
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingjianIT/article/details/79441215
文章标签: Kotlin
个人分类: Kotlin
上一篇Kotlin系列之主构造方法和初始化语句块
下一篇Kotlin系列之接口中的属性
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭