Kotlin-2.3-接口

本文详细介绍Kotlin中的接口概念,包括接口定义、实现、属性声明及冲突解决等内容,并附带实例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文翻译自官方文档Interfaces-接口
附加总结了一些知识点。翻译如有错误和纰漏,欢迎指正。

1-知识点汇总

1、接口使用interface关键字定义。

2、类或者对象可以实现一个或者多个接口

3、接口中的属性该如何定义?

  1. 抽象属性,用abstract定义。
  2. 或者提供访问器的实现

4、接口中的属性的注意点:

  1. 接口中的属性不能有backing fields。
  2. 接口中的getter/setter不能引用接口中的属性。

5、接口中重载时的冲突

类C实现接口A,接口B,A和B中有同名方法fun(),此时C必须要重载fun()方法。

2-正文

Kotlin中的接口与Java8中非常相似。它们包含抽象方法的声明以及方法的实现。接口和抽象类最大的不同在于接口不能存储状态(数据)。接口可以有属性但是这些属性需要是抽象属性或者提供了getter/setter的实现。

接口使用关键字interface定义:

nterface MyInterface {
    fun bar()
    fun foo() {
        //主体可选
    }
}

1-实现接口

类或者对象可以实现一个或者多个接口:

class Child : MyInterface {
    override fun bar() {
        // 主体
    }
}

2-接口中的属性

你可以在接口中声明属性。这些属性必须要是抽象(abstract)的或者必须提供访问器的实现。接口中的属性不具有后台区域,因此在接口中声明的访问器不能引用它们。

interface MyInterface {
    val prop: Int // 抽象

    val propertyWithImplementation: String
        get() = "foo" //具有访问器

    fun foo() {
        print(prop)
    }
}
//实现接口
class Child : MyInterface {
    override val prop: Int = 29
}

3-解决冲突

如果在实现的多个接口中都由同名成员:

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()
    }
}

因为A,B接口有同名成员,所以在D类中必须显式实现这些同名方法。如果想调用这些方法在接口中的实现,必须要指明是那个接口的方法:super<A>.foo()——表明调用借口A的foo方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值