1. 程式人生 > >Kotlin程式設計之介面和實現介面

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()