Kotlin的构造方法探究

Kotlin的构造方法探究

前言:
我在学习kotlin的构造方法时,对书上网上的一些说法产生了疑问。
不知是他们的说法不够准确和完美,还是我的认知错误。
我会对下面的说法提出不同意见,请大佬批评(如果有人看到我这篇文章的话,狗头)。

1.有且仅有一个主构造方法

我的看法:可以没有主构造方法,仅有0个至多个副构造方法
首先明确在哪里写算作主构造方法——在类的首部(class header)而不是在类体中(class body)。
比如这种情况,没有主构造方法,只有一个副构造方法:

//没有主构造方法,只有一个副构造方法
class Human1{
    //在类体中写的副构造方法
    constructor(name: String)
}

这段代码idea只是警告,说是建议写成主构造方法的格式,但是可以编译通过。这是不是算作kotlin可以允许没有主构造方法呢?

还有一种情况:没有主构造方法,只有多个副构造方法:

class Human2 {
    constructor(name: String) {
        println(name)
    }

    constructor(age: Int) {
        println(age)
    }

}

这段代码在idea中甚至没有给出警告。

2.副构造方法必须调用主构造方法

这个问题有点类似上一个问题,
我的看法:副构造方法可以不调用主构造方法。
比如:

class Human3 {
    constructor(name: String) {
        println(name)
    }

    constructor(age: Int) {
        println(age)
    }

}

这里是不是因为没有主构造方法,因而不需要调用主构造方法呢?
下面再看一个例子:

class Human4(){
    constructor(name: String) : this() {
        println(name)
    }

    constructor(age: Int) : this() {
        println(age)
    }
}

可以看到,在Human4这个类上添加了一个空的主构造方法,就导致在这个类的副构造方法必须调用这个空的主构造方法。
由此看出,副构造方法在没有主构造方法的时候,不调用主构造方法。(有点像废话??),而在有主构造方法的时候,必须调用主构造方法。

这些结论仅仅基于我浅薄的认知,欢迎批评。

猜你喜欢

转载自www.cnblogs.com/soclear/p/12590391.html