14:kotlin类和对象 -- 接口(Interfaces)

接口可以包含抽象方法和普通方法。与抽象类的不同之处在于接口不能存储状态。它们可以拥有属性,但这些属性需要是抽象的或定义访问器

使用关键字interface来定义接口

kotlin 复制代码
interface MyInterface {
    fun bar()	// 抽象方法
    fun foo() {	// 普通方法
     // 方法实现
    }
}

实现接口

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

kotlin 复制代码
class Child : MyInterface {
    override fun bar() {
        // 方法实现
    }
}

接口属性

抽象属性或者带有访问器的属性

kotlin 复制代码
interface MyInterface {
   
    val prop: Int // 抽象

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

    fun foo() {
        print(prop)
    }
}

class Child : MyInterface {
    override val prop: Int = 29
}

继承接口

kotlin 复制代码
interface Named {
    val name: String
    val age : Int
}

interface Person : Named {  // 继承Named
    val firstName: String
    val lastName: String

    override val name: String get() = "$firstName $lastName"    // 重写name属性
}

data class Employee(
    override val firstName: String, // 重写firstName属性
    override val lastName: String,  // 重写lastName属性
    override val age: Int   // 重写age属性
) : Person  // 实现Person

重写冲突

当多个父类有相同名称和参数的方法时

kotlin 复制代码
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()
    }
}

对于类D必须要重写foo()bar方法,否则在使用时不知道到底要调用A还是B的方法

相关推荐
Propeller3 小时前
【Kotlin】Kotlin 基础语法:变量、控制和函数
kotlin
Rysxt_12 小时前
Kotlin前景深度分析:市场占有、技术优势与未来展望
android·开发语言·kotlin
莫白媛13 小时前
Android开发之Kotlin 在 Android 开发中的全面指南
android·开发语言·kotlin
天勤量化大唯粉2 天前
基于距离的配对交易策略:捕捉价差异常偏离的均值回归机会(天勤量化代码实现)
android·开发语言·python·算法·kotlin·开源软件·策略模式
hudawei9962 天前
kotlin冷流热流的区别
android·开发语言·kotlin·flow··冷流·热流
hudawei9962 天前
对比kotlin和flutter中的异步编程
开发语言·flutter·kotlin·异步·
モンキー・D・小菜鸡儿2 天前
Android11 新特性与适配指南
android·kotlin·安卓新特性
starrycode8883 天前
【每日一个知识点】Kotlin基础语法核心学习笔记
笔记·学习·kotlin
alexhilton3 天前
学会在Jetpack Compose中加载Lottie动画资源
android·kotlin·android jetpack
用户69371750013843 天前
29.Kotlin 类型系统:智能转换:类型检查 (is) 与类型转换 (as)
android·后端·kotlin