在kotlin中,基类与接口涉及到两个关键字:open
、abstract
本质上这两者都是用于表明 子类可以重写方法或继承
-
open
可以有方法体,子类可以通过super
关键字访问 -
abstract
就如同java中的abstract
一样,即当前类不用实现方法,交由子类实现:
abstract class A{
open fun f(){
println("A.f()")
}
abstract fun g()
}
子类重写时,override
的方法默认是open
,如果需要修改不可再覆盖 需加上final
关键字:
abstract class B:A(){
override fun f(){
super.f()
println("B.f()")
}
final override fun g(){
println("B.g()")
}
}
使用abstract
关键字修饰方法时,类必须也是abstract
,open
同理,如果两者都存在,abstract
即可
class C: B(){
override fun f() {
super.f()
println("C.f()")
}
}
fun main(){
C().apply {
this.f()
this.g()
}
}
最终结果是 A.f() B.f() C.f() B.g()
此外 kotlin中的接口方法,是可以有方法体实现的
interface i{
fun f(){
println("i.i()")
}
fun g()
}
网友评论