今天我们看看如何让在Kotlin的接口中声明属性。
在前面的文章中我们已经介绍过Kotlin中的接口,这里我们先复习一下,然后再重点说说Kotlin中的接口如何声明属性。
Kotlin中的接口
下面是一段Kotlin中接口声明的代码,帮助大家复习一下。
Kotlin代码
package kt
interface Clickable{
fun click()
fun touch() = println('你触摸了')
}
package kt
class Button: Clickable{
override fun click() {
println('点击了。。。')
touch()
}
}
Kotlin中的接口声明属性
我们前面的文章在介绍接口时只是写了在接口中定义方法,所以我们下面说说如何在接口中声明属性。我们知道在Java中,接口中的成员变量都是常量,也就是默认的修饰符是publicstaticfinal类型的,那么在Kotlin中的规则又是什么样呢?
在Kotlin中,我们在接口中可以包含抽象属性声明,什么意思呢?也就是接口只需要定义属性,至于怎么给该属性赋值,怎么取该属性的值接口都不管,交给该接口具体的实现类来处理。如下面一样。
Kotlin代码
对于上面的接口我们怎么实现呢?我们所谓的实现,其实就是给nickname这个属性赋值或者是获取这个属性的值。我们先看看第一种实现类。
Kotlin代码
上面的代码有以下几点要解释一下:
使用:来表示实现一个接口由于要给接口中的nickname属性赋值,所以这里使用了主构造方法并且使用val关键字为该实现类声明了一个属性nickname,换言之就是将初始化该实现类对象的属性赋值给了nickname属性,再者val声明的属性默认提供了获取值的方法。使用override关键字表示重写了接口的nickname属性,这个是强制要求
除了上面使用主构造方法来实现接口的属性这种方法,还有一种在类内部重写的方式,代码如下:
Kotlin代码
class SubPeople(val email: String): People{
override val nickname: String
get() = email.substringBefore('@')
}
fun main(args: Array){
val subPeople = SubPeople('mo@qq.com')
println(subPeople.nickname)
}
上面这种方式是我们实现了接口的nickname属性并且自定义了getter方法,使可以获取到nickname的值。同样需要注意,这里override关键字是强制要求。
包含getter和setter的属性
其实在接口中,除了抽象声明属性,我们还可以写包含getter和setter的属性,但是需要注意的是getter和setter不能引用需要保存状态的字段,因为接口是不允许保存状态的,就如下面这样。
Kotlin代码
interface People{
val email: String
val nickname: String
get() = email.substringBefore('@')
}
class PrivatePeople(override val nickname: String, override val email: String) : People
class SubPeople(override val email: String): People{
override val nickname: String
get() = email.substringBefore('@')
}
fun main(args: Array){
val subPeople = SubPeople('mo@qq.com')
println(subPeople.nickname)
}
上面的代码我们为nickname自定义了getter,这是允许的。
写在最后
这一次我们进一步学习了接口,探讨了在Kotlin中在接口中定义属性的规则,可以看出Kotlin在这一块比Java更加灵活。
文章为作者独立观点,不代表观点
村里的WaltSmith2023-01-26
除权=散户的股票贬值。填权=新韭菜入场接盘。实际上韭菜的数量和增量是有限的,大股东增发股票却是无限的,而且大股东手里股票的成本几乎为零。在这种悬殊的背景下,大股东=想要分红,减持套现。散户=想要股价上涨。所以等分红对散户没有意义,弊大于利,如果韭菜看分红不如去银行买大额存单,至少本金不会减少,一个公司能不能活10年都难说。如果分红有用的话,有钱人不知道持有?所以最大的问题是,韭菜善于自我安慰,不要看别人怎么说,就看有钱人怎么做就行,小时候不让抄作业,这个只适用于极少数学习好的人,大部分人现实中抄作业至少能得80分。