KotLin 相关文档
官方在线Reference
kotlin-docs.pdf
Kotlin for android Developers 中文翻译
Kotlin开发工具集成,相关平台支持指南
Kotlin开源项目与Libraries
Kotlin开源项目、资源、书籍及课程搜索平台
Google’s sample projects written in Kotlin
Kotlin and Android
接口说明
接口在Kotlin中非常类似于Java 8。它们可以包含抽象方法声明,以及实现方法。
他们不同于抽象类的地方:接口不能存储状态(即不能有属性的setter)。他们可以有属性,但这些需要抽象或提供访问器实现。
接口操作
如下,一个接口:
interface MyInterface {
fun bar()
val prop: Int // abstract val,子类重写get
val propertyWithImplementation: String get() = "foo" //自实现get
/*
在接口中,用var 定义属性,语法没问题,但运行有问题。 说明 接口中 还是定义 val这样的 只读属性为好
*/
// var proper:Int //abstract var, 子类重写get、set
fun foo() {
println("foo")
}
}
子类实现
class Child : MyInterface {
override val prop: Int
get() = 0x10
// set(value) {prop = value} //接口属性不能有setter
override fun bar() {
}
override fun foo() {
println("Child.foo")
}
}
直接初始化一个接口
需要使用 object : [interface]
来直接实现一个接口:
fun main(args: Array<String>) {
val m = object : MyInterface {
override fun bar() {
println(prop)
}
override val prop: Int
get() = -1
}
m.foo()
m.bar()
var child = Child()
println(child.prop)
}
接口方法重写
interface A {
fun foo() { println("A") }
fun bar()
}
interface B {
fun foo() { println("B") }
fun bar() { println("bar") }
}
- 实现A接口
class C : A {
override fun bar() { println("bar") }
}
- 实现A、B接口
class D : A, B {
override fun foo() {//重写foo(),调用了A、B中的foo()
super<A>.foo()
super<B>.foo()
}
override fun bar() {//bar()在super中,一个是抽象的,一个是有实现的, 直接super.bar() 会选择有实现的
// super<B>.bar()
super.bar()
}
}
因A、B中的foo()都是一个实现方法,在重写foo()时,可以使用super<interface>.
前缀来选择调用哪个接口的实现方法,这里把A、B的都调用了。
bar()的说明在注释中了。
测试:
var d = D()
d.foo()
d.bar()