在kotlin中,基類(lèi)與接口涉及到兩個(gè)關(guān)鍵字:open
、abstract
本質(zhì)上這兩者都是用于表明 子類(lèi)可以重寫(xiě)方法或繼承
-
open
可以有方法體,子類(lèi)可以通過(guò)super
關(guān)鍵字訪問(wèn) -
abstract
就如同java中的abstract
一樣,即當(dāng)前類(lèi)不用實(shí)現(xiàn)方法,交由子類(lèi)實(shí)現(xiàn):
abstract class A{
open fun f(){
println("A.f()")
}
abstract fun g()
}
子類(lèi)重寫(xiě)時(shí),override
的方法默認(rèn)是open
,如果需要修改不可再覆蓋 需加上final
關(guān)鍵字:
abstract class B:A(){
override fun f(){
super.f()
println("B.f()")
}
final override fun g(){
println("B.g()")
}
}
使用abstract
關(guān)鍵字修飾方法時(shí),類(lèi)必須也是abstract
,open
同理,如果兩者都存在,abstract
即可
class C: B(){
override fun f() {
super.f()
println("C.f()")
}
}
fun main(){
C().apply {
this.f()
this.g()
}
}
最終結(jié)果是 A.f() B.f() C.f() B.g()
此外 kotlin中的接口方法,是可以有方法體實(shí)現(xiàn)的
interface i{
fun f(){
println("i.i()")
}
fun g()
}