Kotlin编程之接口和实现接口

Kotlin编程相关知识点介绍


本篇概括:

  • 接口介绍

  • 实现接口

定义接口


介绍:

Kotlin 的接口很像 java 8。它们都可以包含抽象方法,以及方法的实现。和抽象类不同的是,接口不能保存状态。可以有属性但必须是抽象的,或者提供访问器的实现。

定义一个接口,包含抽象属性,属性的访问器实现,抽象方法,方法的实现,编写代码如下:

package com.xingen.kotlin

fun main(args: Array<String>) {
    var instance = Test2015526()
    println(instance.property)
    println(instance.propertyIml)

    instance.test()
    instance.test1()
}

class Test2015526 : TestInterface {
    override val property: String get() = "实现类定义接口中属性的实现"

    override fun test1() {
        println("在实现类中重写接口方法 ")
    }
}

/**
 * 自定义一个接口
 */
interface TestInterface {
    /**
     * 抽象的属性
     */
    val property: String

    /**
     *  访问器(这里指的是属性的get())的实现,即抽象属性的实现
     */
    val propertyIml: String get() = "接口内部定义属性的实现"

    /**
     *  方法的实现
     */
    fun test() {
        println("输出自定义的接口方法 ")
    }

    /**
     * 抽象方法
     */
    fun test1()
}

输出结果:

实现类定义接口中属性的实现
接口内部定义属性的实现
输出自定义的接口方法 
在实现类中重写接口方法 

可知

  • 用关键字interface定义接口

  • 一个类可以实现一个或者多个接口

  • 接口中有两种方法(抽象方法和方法的实现),有两种属性(抽象属性和属性访问器的实现),这与Java有很大的不同。

  • 接口中只有val修饰的只读属性,没有var修饰的可写属性

  • 实现接口,在类头后面添加:接口名

  • 实现接口,必需重写抽象属性和抽象方法,且用override修饰。

  • 接口的方法和属性默认open修饰的

接口和父类存在同名方法的处理方式


package com.xingen.kotlin

fun main(str: Array<String>) {
    Test<String>("本类是").test()
}
class Test<T> constructor(override var t: T) : BaseTest<T>(t),TestInterface {
    /**
     * 复写父类中的方法
     */
    override fun test() {

        println("${t} Test子类 ")
        //调用接口的test()
        super<TestInterface>.test()
        //调用父类的test()
        super<BaseTest>.test()
    }
}
/**
 * 自定义父类
 */
open class BaseTest<T>( open val t: T) {
    open fun test() {
        println("${t} BaseTest父类 ")
    }
   fun closeTest(){
        println("父类中不能被子类重新复写的方法")
   }
}

/**
 * 自定义一个接口
 */
interface  TestInterface{
    //接口的成员变量默认是 open 的
    fun  test(){  println("输出自定义的接口方法 ") }
}

输出结果:

本类是 Test子类 
输出自定义的接口方法 
本类是 BaseTest父类 

从以上代码可知:

  • 实现接口,在类头后面添加:接口名,而继承父类是:父类名()

  • 接口的方法的默认open修饰的

  • 当父类和接口或者多个接口中中有同名方法时候,调用应该使用super<类名>.同名方法的形式调用。

     //调用接口的test()
    super<TestInterface>.test()
    //调用父类的test()
    super<BaseTest>.test()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值