Kotlin 学习笔记(八)—— Kotlin类与对象之接口

Kotlin 学习笔记(八)—— Kotlin类与对象之接口


Kotlin学习笔记系列教程

Kotlin 学习笔记(一)—— 概述、学习曲线、开发工具、参考资料
Kotlin 学习笔记(二)—— 基础语法
Kotlin 学习笔记(三)—— 习惯用法
Kotlin 学习笔记(四)—— Kotlin基础之基本类型
Kotlin 学习笔记(五)—— Kotlin基础之控制流、返回与跳转、 包与导入
Kotlin 学习笔记(六)—— Kotlin类与对象之类和继承
Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段


接口

Kotlin 的接口和 Java8 类似,既包含抽象方法的声明,也包含实现。与抽象类不同的是,接口无法保存柱状。它可以有属性但必须声明为抽象或提供访问器实现。

使用关键字 interface 来定义接口

    interface A {
        fun setName()

        fun setAge(){
            //可选方法体
        }
    }

实现接口

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

class B : A {
    override fun setName() {

    }
}

接口中的属性

你可以在接口中定义属性。在接口中声明的属性要么是抽象的,要么提供访问器的实现,在接口中声明的属性不能有幕后字段,因此接口中声明的访问器不能引用它们。

interface A {
    val time:Int

    var name:String
    get() = "aaa"
    set(value) {

    }

    fun setName()

    fun setAge(){
        //可选方法体
    }
}

class B : A {
    override val time: Int
        get() = 5

    override fun setName() {

    }
}

解决覆盖冲突

实现多个接口或继承父类时,可能会遇到同一方法继承多个实现的问题:

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 都定义了方法 foo() 和 bar(),两者都实现了foo(),但是只要 B 实现了bar(),bar()在 A 中没有标记为抽象,因为没有方法体时默认为抽象。因为 C 实现了 A 的具体类,所以必须重写 bar() 并实现这个抽象方法。

然而,如果我们从 A 和 B 派生 D,我们需要实现我们从多个接口继承的所有方法,并指明 D 应该如何实现它们。这一规则既适用于继承单个实现(bar())的方法也适用于继承多个实现(foo())的方法。


以上就是类与对象第三篇之接口,第四篇将学习可见性修饰符


个人博客地址:http://outofmemory.top/
CSDN地址:http://blog.csdn.net/dazhaoDai
GitHub地址:https://github.com/dazhaoDai


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值