标签:上网 添加 调用 man 例子 必须 name 导致 str
前言:
我在学习kotlin的构造方法时,对书上网上的一些说法产生了疑问。
不知是他们的说法不够准确和完美,还是我的认知错误。
我会对下面的说法提出不同意见,请大佬批评(如果有人看到我这篇文章的话,狗头)。
我的看法:可以没有主构造方法,仅有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中甚至没有给出警告。
这个问题有点类似上一个问题,
我的看法:副构造方法可以不调用主构造方法。
比如:
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这个类上添加了一个空的主构造方法,就导致在这个类的副构造方法必须调用这个空的主构造方法。
由此看出,副构造方法在没有主构造方法的时候,不调用主构造方法。(有点像废话??),而在有主构造方法的时候,必须调用主构造方法。
这些结论仅仅基于我浅薄的认知,欢迎批评。
标签:上网 添加 调用 man 例子 必须 name 导致 str
原文地址:https://www.cnblogs.com/soclear/p/12590391.html