Kotlin程式設計之父類和繼承父類
阿新 • • 發佈:2019-02-20
Kotlin程式設計相關知識點介紹:
1. 預設繼承Any超類:
在Kotlin程式設計中,Any類是超類.
public open class Any {
public open operator fun equals(other: Any?): Boolean
public open fun hashCode(): Int
/**
* 返回物件的字串形式.
*/
public open fun toString(): String
}
通常我們宣告一個類:
class Test{//隱式繼承Any
}
有沒有感覺和Java很像呀,在Java中每個類都是預設繼承Object的哦。
2. 繼承自定義的父類:
在一個原始檔中,編寫以下程式碼:
package com.xingen.kotlin
fun main(str: Array<String>) {
var instance: BaseTest<String>
instance = Test<String>("本類是")
//父類物件呼叫子類物件的方法
instance.test()
instance.closeTest()
}
/**
* 繼承自定義的BaseTest父類
* 覆蓋屬性t
* 複寫test()
*/
class Test<T> constructor(override var t: T) : BaseTest<T>(t) {
/**
* 複寫父類中的方法
*/
override fun test() {
println("${t} Test子類 ")
}
}
/**
* open關鍵字:
* 1. 修飾父類:open class BaseTest
* 2. 主構造方法中宣告的屬性:open val t: T
* 3. 修飾方法:open fun test(){ }
*
* 預設情況下,Kotlin中的類,屬性,方法都是被final修飾的,不允許繼承或者覆蓋重寫。
*/
open class BaseTest<T>( open val t: T) {
open fun test() {
println("${t} BaseTest父類 ")
}
fun closeTest(){
println("父類中不能被子類重新複寫的方法")
}
}
結果輸出:
本類是 Test子類
父類中不能被子類重新複寫的方法
可知:
預設情況下,Kotlin中的類都是final標註(可省略),這意味著不允許被繼承。新增
open
標註才可以使父類被子類繼承。預設情況下,Kotlin中類的屬性和方法都是被final標註(可省略)的,不允許被子類重寫覆蓋。新增
open
標註後的屬性或者方法才能被重寫覆蓋,但是都必須新增override
修飾。繼承父類:在子類的類頭後面 加上
:
和父類。實際上這裡有三種表現形式 :- 當父類無建構函式時候,表現為
:父類名()
; - 當父類有主構造方法時候,表現形式為
:父類名(傳遞的引數)
- 當父類中只有二級建構函式時候,表現形式為
:父類名
;
- 當父類無建構函式時候,表現為
若是父類有主構造方法,子類在繼承父類時候,父類的建構函式中的引數必需立即初始化,也就是傳遞引數過去。例如:
class Test<T> constructor(override var t: T) : BaseTest<T>(t)
若是父類中無主構造方法,有二級構造方法,在子類繼承父類的時候,在子類的二級構造方法中呼叫
super()
進行初始化。class Test<T> : BaseTest<T>{ var t :T?=null constructor(t:T) :super(t) { this.t=t } /** * 複寫父類中的方法 */ override fun test() { println("$t Test子類 ") super.test() } } /** * 自定義父類 */ open class BaseTest<T> { private var t:T?=null constructor(t:T){ this.t=t } open fun test() { println("$t BaseTest父類 ") } fun closeTest(){ println("父類中不能被子類重新複寫的方法") } }