【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )(二)

简介: 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )(二)

VI . 接口中的属性属性覆盖 ( 变量 / 常量 )


接口中的属性覆盖 :



① 抽象属性 : 接口中的 变量 / 常量 属性可以声明成抽象的 ;


② 关于访问器 : 只有常量才能使用添加访问器替代抽象属性方案 , 变量不能添加访问器 ;


③ 常量与变量 : 覆盖属性 , 可以使用变量覆盖常量 , 反过来不行 , 变量只能使用变量覆盖 ;


//1 . 接口定义
interface Intf{
    //抽象属性 常量 , 默认被 abstract open 修饰 ( 可省略 )
    //常量可以提供一个访问器 , 变量只能声明成抽象属性 , 不能添加访问器
    val age : Int
    //抽象属性 变量 , 默认被 abstract open 修饰 ( 可省略 )
    //常量可以提供一个访问器 , 变量只能声明成抽象属性 , 不能添加访问器
    var name : String
}
//2 . 接口实现类
abstract class Impl : Intf {
    //覆盖属性 , 可以使用变量覆盖常量 , 反过来不行
    override var age: Int = 18
    //覆盖属性 , 变量只能使用变量覆盖
    override var name: String = "Tom"
}



VII . 接口覆盖冲突问题


1 . 接口覆盖冲突问题描述 : 一个类可以实现多个接口 , 如果多个接口中出现相同函数签名的函数 ( 正常带方法体的函数 ) , 如何调用不同接口的相同签名函数 ; ( 注意 : 这里调用的方法是有方法体的正常方法 )



2 . 覆盖冲突解决方案 : 可以通过 super<接口名> 调用不同接口的正常方法 ;



3 . 代码示例 : Intf1 和 Intf2 接口中都定义了非抽象函数 action_real , Impl 类实现了两个接口 , 通过使用 super.action_real() 调用 Intf1 中的 action_real 方法 , 通过使用 super.action_real() 调用 Intf2 中的 action_real 方法


/

/接口 1 定义
interface Intf1{
    fun action_abstract()
    fun action_real(){
        println("Intf1 : action_real")
    }
}
//接口 2 定义
interface Intf2{
    fun action_abstract()
    fun action_real(){
        println("Intf2 : action_real")
    }
}
//实现两个接口
class Impl : Intf1 , Intf2 {
    override fun action_abstract() {
        println("Impl : action_abstract")
    }
    override fun action_real() {
        //调用 Intf1 接口中的 action_real 方法
        super<Intf1>.action_real()
        //调用 Intf2 接口中的 action_real 方法
        super<Intf2>.action_real()
    }
}




VIII . 接口继承接口


接口继承接口 :



① 派生接口继承 : 一个接口可以继承另一个接口 , 派生接口拥有基类接口的成员 ;


② 派生接口新成员 : 派生接口声明新的接口成员和属性 ;


③ 子类实现派生接口 : 需要实现两个接口的所有的抽象成员 ( 属性 / 方法 ) ;


//接口定义
interface Intf1{
    //抽象属性
    var age : Int
    //抽象方法
    fun action_abstract()
}
//接口定义
interface Intf2 : Intf1{
    //抽象属性
    var name : String
    //抽象方法
    fun action_abstract2()
}
//接口实现 , 注意没有构造函数委托
//需要实现 Intf1 和 Intf2 中的抽象成员
class Impl : Intf2 {
    override var name: String = "Tom"
    override var age: Int = 18
    override fun action_abstract() {
        println("Impl : action_abstract")
    }
    override fun action_abstract2() {
        println("Impl : action_abstract")
    }
}


目录
相关文章
|
4月前
|
安全 Java Kotlin
面试必备:Kotlin 线程同步的 N 种方法
面试必备:Kotlin 线程同步的 N 种方法
195 0
|
3月前
|
Kotlin
Kotlin类的定义、构造函数、封装、继承和多态
Kotlin类的定义、构造函数、封装、继承和多态
|
1月前
|
Kotlin
Kotlin 面向对象编程 (OOP) 基础:类、对象与继承详解
面向对象编程(OOP)是一种编程范式,它通过创建包含数据和方法的对象来组织代码。相较于过程式编程,OOP 提供了更快更清晰的结构,有助于遵守 DRY(Don&#39;t Repeat Yourself)原则,使代码更易于维护和扩展。在 Kotlin 中,类和对象是 OOP 的核心。类作为对象的模板,定义了对象的行为和状态;对象则是类的具体实例。例如,`Car` 类可以定义汽车的品牌、型号等属性,以及如驾驶和刹车等功能。通过构造函数可以快速初始化对象的属性。此外,Kotlin 支持继承机制,子类可以从父类继承属性和方法,促进代码重用。
31 2
|
2月前
|
前端开发 Android开发 Kotlin
Kotlin小技巧之用Transformations.map方法转换LiveData
`Transformations.map`在Kotlin的Android开发中用于LiveData的数据转换,它在数据变化时自动转换并更新新LiveData。例如,从Int转为String。当原始LiveData更新时,转换后的LiveData也相应更新,适合MVVM架构。观察者可以订阅转换后的LiveData以更新UI。
33 2
|
3月前
|
设计模式 Java Kotlin
Kotlin中的委托、属性委托和延迟加载
Kotlin中的委托、属性委托和延迟加载
|
3月前
|
Kotlin
Kotlin中抽象类与接口
Kotlin中抽象类与接口
Android-kotlin-接口与多态的表现,面经解析
Android-kotlin-接口与多态的表现,面经解析
|
IDE Java 编译器
Kotlin属性访问器与方法签名冲突的问题
Kotlin属性访问器与方法签名冲突的问题
82 0
|
Kotlin
Kotlin中接口、抽象类、泛型、out(协变)、in(逆变)、reified关键字的详解
Kotlin中接口、抽象类、泛型、out(协变)、in(逆变)、reified关键字的详解
85 0
|
Kotlin
Kotlin中继承、类型转换、Any超类、object关键字详解
Kotlin中继承、类型转换、Any超类、object关键字详解
129 0