Kotlin程式設計之介面和實現介面
阿新 • • 發佈:2019-01-03
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()