Kotlin构造⽅法梳理
Kotlin主从构造⽅法梳理
1. 主构造⽅法
Kotlin中有个专有名词叫做主构造⽅法(primary construcor),其实很好理解,但弄清楚这个词是理清Kotlin中构造⽅法的前提。所谓主构造⽅法,就是在类定义的第⼀⾏的类名后⾯添加( ),即以类名加括号的表达⽅式来表⽰主构造⽅法。
class User(val name: String = “Bob"){kotlin修饰符
...
}
2. 两种构造⽅式
Kotlin中的构造⽅式可以归纳为两类:
1. 单⼀个主构造⽅法
这种构造包含Java中构造⽅法的两种形式
1. 只有⼀个构造⽅法
2. 多个重载参数的的构造⽅法
通过在主构造⽅法中添加参数,可以⾃动在类中添加相应的属性和默认值,这种⽅式可以以简单的⽅式实现Java中需要多个构造⽅法重载接受多个参数的⽤例,可以涵盖⼤部分曾经需要多个构造⽅法的情形。当主构造⽅法中每⼀个参数都存在默认值时,会⾃动⽣成⽆参的构造⽅法。
2. 有多个并列的构造⽅法
上述构造⽅式虽然涵盖了⼤部分我们需要重载构造⽅法的情形,但当我们需要根据不同的参数提供不同的初始化⽅法时我们需要提供完整的构造⽅法。Kotlin提供了多个并列的构造⽅法的形式来满⾜这种需求:
class User{
constructor(name: String){
...
}
constructor(id: Long){
...
}
}
与主构造⽅法相应的,我们将使⽤constructor的构造⽅法称为从构造⽅法(secondary constructor),注意在这种构造⽅式中,我们不能在constructor的参数中通过val或var来为类添加相应的属性。使⽤这种构造⽅式就与Java中的构造⽅法颇为类似了,只不过我们⽤constructor关键字取代了类名。
3. ⼀主多从的构造⽅式
在Kotlin中由于语法的原因可以构造出⼀主多从的奇葩构造⽅式:
class User(val name: String ="Bob"){
init{
...
}
constructor(id: Long):this(){
...
}
constructor(id: Long, email:String):this(){
...
}
}
能够造出这种⽅式⼤多还是因为根据参数的不同提供多种初始化⽅式,与上述的⽅法2实现的功能类似,然⽽因为主构造⽅法不存在⽅法体,只能使⽤init,所以这种构造⽅式不如使⽤多个并列构造⽅法的⽅式直观,徒增了阅读难度,并不推荐使⽤这种⽅式。在主从构造⽅法混⽤的情况下,从构造⽅法必须通过":"调⽤主构造⽅法。主构造⽅法先于从构造⽅法执⾏。
但使⽤这种⽅式在需要多个构造⽅法,部分⽅法根据参数不同提供不同初始化⽅法,部分⽅法仅仅提供参数重载时,也能提供⼀定程度上的简化,即通过主构造⽅法省略掉重载参数的构造⽅法。
4. init关键字
init关键字称为初始化语块,主要是为了弥补主构造⽅法没有⽅法体的缺陷⽽存在的,我们将需要初始化的内容放在init语块中。
在Java中我们通常会将每个构造⽅法都会掉⽤到的共同代码提取到⼀个⽅法中,在Kotlin中init语块可以起到这个⽅法的作⽤,init并不依托于主构造⽅法存在,在使⽤多个从构造⽅法并列的形式中,依然可以通过init来执⾏通⽤代码,⽽且init中的代码会先于从构造⽅法执⾏。
5. constructor关键字
我们通过constructor关键字来表⽰从构造⽅法。
在主构造⽅法中我们需要constructor关键字与可见性修饰符⼀起使⽤来设置构造⽅法的可见性:
class User private constructor(val name: String){
...
}
6. Kotlin中的继承
在Kotlin中实质上是对类的继承,⽽表现形式是对⽗类构造⽅法的继承,我们需要选取使⽤合适的⽗类构造⽅法,例如,在主构造⽅法中进⾏继承:
class User(name: String):Person(name){
...
}
⽽在从构造⽅法的继承形式上,我们依然需要选择继承⽗类⽅法:
class User : Person {
constructor(name: String):super(name){
}
constructor(name: String, id: Long):super(name, id){
}
}
当然,如果不使⽤super,可以选择部分构造⽅法使⽤使⽤this调⽤⾃⼰已经继承了⽗类构造⽅法的构造⽅法。
主从混⽤的形式以此类推,不再赘述。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论