前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin之接口

Kotlin之接口

作者头像
大话swift
发布2019-09-19 16:11:53
4800
发布2019-09-19 16:11:53
举报
文章被收录于专栏:大话swift

昨天写协成之后感觉协成的文章不是太好些要慢慢屡屡,因此今天折回来聊聊接口……

为啥会有接口呢?这个还要从继承说起,OOP的世界中继承这个东东太复杂了而目前C++依然保留这多继承的体系其余的大部分新兴的高级语言都舍弃了多继承,但是仅仅单继承又不符合OOP的概念体系,怎么办!!!于是接口应运而生---绕过多继承的坑,有能有多继承带来的好处……这些都是今天引入接口的引子,我们下面看看Kotlin接口带来哪些新的不同

1 接口中可以定义方法及方法体和属性

代码语言:javascript
复制
interface MyInterface{
    //子类需要实现
    fun sayHello()
    //可以被子类覆写
    fun hi(){
        println("hi,gay")
    }
    //可以被覆写
    val name:String
}

abstract class B:MyInterface{
    override val name: String
        get() = "B Name"
}

上栗中我们看到接口中可以定义属性变量和方法甚至可以直接实现方法体,这在Java中是不被允许的,当然了这个在swift中是第一的创新,也再次验证了Kotlin是另一版本的swift?

2接口继承

代码语言:javascript
复制
interface  MySubInterface:MyInterface{
    override fun sayHello() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        println("sub interface --sayHello")
    }
    override val name: String
        get() {
            return  "MySubInterface"
        }
}

class AA: MySubInterface{}

不错吧,Kotlin的接口继承还是很有意思的,可以完全吧class应有的功能全部搞定

3继承时的冲突问题

文章以开头我们就说了Kotlin可以实现多接口继承,那么当出现多接口中方法名重复如何处理呢?我们先看一个例子

代码语言:javascript
复制
interface C{
    fun foo(){
        println("C--->foo")
    }
    fun bar()
}
interface D{
    fun foo(){
        println("D---->foo")
    }
    fun bar(){
        print("D---->bar")
    }
}

例子中CD几口均实现里自己定义的方法foo,而bar接口只有在D中实现,C中的bar接口等待子类去实例化。例子设计的很全面既有重名的方法还有重名单有没有实现的方法

代码语言:javascript
复制

class E: C,D{
    override fun foo() {
        super<C>.foo()
        super<D>.foo()
    }

    override fun bar() {
        super.bar()
    }
}

自理中对于foo的覆写我们补多少,而要想覆写时调用父类的方法foo则需要要指定调用哪个父类的foo方法从而区分出不同的类继承。而对于bar我们发现我们省略了声明父类的声明---因为C并没有实现bar的方法体也就无所谓调用父类的功能啦,当然了为了代码规范一致性我们还是可以把父类的声明给添加上super<D>.bar()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档