【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 - 面向对象之抽象类与接口
Kotlin - 面向对象之抽象类与接口
11 0
|
20天前
|
NoSQL Redis Kotlin
Kotlin教程笔记(17) - 属性代理
Kotlin教程笔记(17) - 属性代理
|
19天前
|
IDE 开发工具 iOS开发
Kotlin教程笔记(11) - 面向对象之抽象类与接口
本系列教程笔记详细讲解了Kotlin语法,适合深入学习。若需快速掌握Kotlin,建议查阅“简洁”系列教程。本文重点介绍了Kotlin中的抽象类与接口,包括接口的定义、实现、继承,以及抽象类的定义、构造器、方法实现等关键概念。
28 2
|
6天前
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
45 9
|
6天前
|
Java 物联网 Kotlin
Kotlin教程笔记(11) - 面向对象之抽象类与接口
Kotlin教程笔记(11) - 面向对象之抽象类与接口
40 9
|
5天前
|
Java 物联网 Kotlin
Kotlin - 面向对象之抽象类与接口
Kotlin - 面向对象之抽象类与接口
24 5
|
2天前
|
NoSQL Redis Kotlin
Kotlin - 属性代理
Kotlin - 属性代理
|
11天前
|
Java 物联网 Kotlin
Kotlin - 面向对象之抽象类与接口
Kotlin - 面向对象之抽象类与接口
18 5
|
8天前
|
NoSQL Redis Kotlin
Kotlin教程笔记(17) - 属性代理
Kotlin教程笔记(17) - 属性代理
17 1
|
9天前
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现