Kotlin 接口
Kotlin 接口 用 interface 关键字定义接口,方法有默认实现
interface MyInterface {
fun bar() // 未实现
fun foo() { //已实现
// 可选的方法体
println("foo")
}}
实现接口
类或对象可实现一个或多个接口
class Child : MyInterface {
override fun bar() {
// 方法体
}}
实例
interface MyInterface {
fun bar()
fun foo() {
// 可选的方法体
println("foo")
}}
class Child : MyInterface { override fun bar() { // 方法体 println("bar") }}
fun main(args: Array<String>) { val c = Child() c.foo(); c.bar(); }
class Child : MyInterface { override fun bar() { // 方法体 println("bar") }}
fun main(args: Array<String>) { val c = Child() c.foo(); c.bar(); }
class Child : MyInterface {override fun bar() {// 方法体println("bar")}}
fun main(args: Array<String>) {val c = Child()c.foo();c.bar(); }
输出结果为
foo bar
接口中的属性
接口中的属性只能是抽象的,不允许初始化值,接口不会保存属性值,实现接口时,必须重写属性
interface MyInterface{
var name:String //name 属性, 抽象
}
class MyImpl:MyInterface{
override var name: String = "facesoho" //重写属性
}
var name:String //name 属性, 抽象
}
class MyImpl:MyInterface{
override var name: String = "facesoho" //重写属性
}
实例
interface MyInterface {
var name:String //name 属性, 抽象的
fun bar() fun foo() { // 可选的方法体
println("foo") }}
class Child : MyInterface { override var name: String = "facesoho" //重写属性
override fun bar() { // 方法体 println("bar") }}
fun main(args: Array<String>) { val c = Child() c.foo(); c.bar(); println(c.name) }
fun bar() fun foo() { // 可选的方法体
println("foo") }}
class Child : MyInterface { override var name: String = "facesoho" //重写属性
override fun bar() { // 方法体 println("bar") }}
fun main(args: Array<String>) { val c = Child() c.foo(); c.bar(); println(c.name) }
输出结果为:
foo bar facesoho
函数重写
实现多个接口时,可能会遇到同一方法继承多个实现的问题
实例
interface A {
fun foo() { print("A") } // 已实现
fun bar() // 未实现,没有方法体,是抽象的}
interface B {
fun foo() { print("B") } // 已实现
fun bar() { print("bar") } // 已实现}
class C : A {
override fun bar() { print("bar") } // 重写}
class D : A, B {
override fun foo() {
super<A>.foo()
super<B>.foo()
}
override fun bar() {
super<B>.bar()
}}
fun main(args: Array<String>) {
val d = D()
d.foo(); d.bar();}
输出结果为:
ABbar
接口 A 和 B 都定义了方法 foo() 和 bar(),都实现了 foo(), B 实现了 bar()。 C 是一个实现了 A 的具体类,所以必须要重写 bar() 并实现这个抽象方法。
如果从 A 和 B 派生 D,需要实现多个接口继承的所有方法,并指明 D 应该如何实现它们。这一规则 既适用于继承单个实现(bar())的方法也适用于继承多个实现(foo())的方法。
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题