接口

作者: codergege | 来源:发表于2018-11-24 22:21 被阅读0次

回到目录
项目源码 kotlin-class 项目


使用 interface 声明一个接口, 接口里可以声明抽象方法, 也可以有方法实现. 跟抽象
类的区别是, 接口不能保存状态(没有 backing field), 可以声明属性但是不能初始化它,
得是抽象属性, 或提供 getter setter 方法. 又因为无法保存状态, 所以 setter 没什么
意义. 所以若不是抽象属性, 一般用 val 并提供 getter.

属性重写可以直接用主构造函数中使用 override, 也可以

interface Ia {
    val va: Int // 抽象属性
    var vb: Int // 抽象属性
    val vc get() = 1 // 提供 getter 的属性
    var vd
        get() = 2
        set(value) {
            println("如果子类重写了 vd 属性, 这里不会执行")
            println("没有 backing field, 不能保存状态, 这么做基本上没意义")
        }
    fun a() // 抽象方法
    fun b() = println("b") // 具体方法, 不用 override
}

class A(override val va: Int, override var vb: Int) : Ia {
    // vc 和 vc 都有实现代码, 所以不必须重写
    // 我们重写个 vd 吧
    override var vd = 2222
    override fun a() {
        println("a")
    }
    // 可以重写, 也可以不重写
    override fun b() {
        super.b()
        println("A b")
    }
}

fun main(args: Array<String>) {
    val objA = A(11, 22)
    println(objA.va) // 11
    println(objA.vb) // 22
    println(objA.vc) // 1
    println(objA.vd) // 2222
    objA.vd = 3 // 如果没重写 vd, 是无法保存状态的, 但是重写了.
    println(objA.vd) // 3
    objA.a() // a
    objA.b()  // b 换行 A b
}

接口继承

接口可以继承其他接口.

interface Ib {
    val b: Int
}
interface Ic: Ib {
    val c: Int
    override val b: Int
        get() = c * 2
}

// 属性 b 已经有实现代码了, 所以不用重写
class D(override val c: Int, val d: Int) : Ic {
}

解决重写冲突问题

// 解决冲突
interface Ie {
    fun f() = println("Ie")
}
interface If {
    fun f() = println("If")
}
class Cg: Ie, If {
    // 必须重写了, 因为不知道要调用哪个 f()
    override fun f() {
        println("Cg")
        // 需要指定调用哪个父类接口的实现方法可以这样
        super<Ie>.f()
        super<If>.f()
    }
}

回到目录

相关文章

  • 接口接口接口

    发现很多朋友对于接口都很纠结,阐述一下个人对接口的理解。 接口分为很多种类型,程序语言内部接口 移动端和服务端接口...

  • Android常用接口

    不知名接口 头条接口: 科技接口: 财经接口: 军事接口: 体育接口: 房产接口: 足球接口: 娱乐接口: 电影接...

  • 第十八天 微信微博天气接口

    分享接口 微信接口 微博接口 天气接口 mob接口

  • 接口测试概述

    接口(interface)的概念 常见接口名词 接口测试: 接口测试目的: 接口测试的重要性: 接口测试流程 接口...

  • 接口测试

    接口测试概念: 接口:接口是为了提供一种服务 所有的接口统称为API,接口分为内部接口和外部接口 外部接口:测试被...

  • 接口

    接口 接口类型 空接口 接口嵌套 接口断言 type关键字

  • 线程池原理

    Callable 接口 Runnable 接口 Future接口 RunnableFuture 接口 Future...

  • JMeter-一个接口的返回值作为输入传给其他接口

    背景: 在用JMeter写接口case,遇到一种情况,接口1查看列表接口,接口2查看详情接口,接口2需要传入接口1...

  • 用户操作接口

    登陆 接口地址 获取列表 接口地址 删除 接口地址 批量删除 接口地址 编辑用户 接口地址 添加用户 接口地址

  • JAVA中的集合框架 List (二)

    Collection接口List接口简介 Collection接口、子接口及其实现类,Collection接口是j...

网友评论

      本文标题:接口

      本文链接:https://www.haomeiwen.com/subject/kfhuqqtx.html