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中是没有这个概念的,同时他还介绍了从构造方法的委托规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值