kotlin open与final

kotlin 的 open 与java 中的 final相反。kotlin中类和类中的方法都是final类不能继承,类中方法不能重写,打破final限制,需要添加open关键字:

为类增加open,class可以被继承了

open class BaseActivity : AppCompatActivity() {
 
}

为方法增加open,嘿嘿,就可以被重写了

open fun setRootView(view: ViewGroup) {
	baseRootView = view
}

在Kotlin中,所有的类默认都是final的。如果你需要允许它可以被继承,那么你需要使用open声明:

//这个类具有`open`属性,可以被其他类继承
open class People: Speakable{
    //`open`的方法被实现和覆写,该方法也是`open`的
    override fun say() {}
    //`final`属性的方法,不可被覆写
    fun sayHello() {}
    //`open`属性的方法,可以被继承和覆写
    open fun sayName() {}
    //`final`修饰一个原本具有`open`属性的方法,使其变得不可再被覆写
    final override fun sayEnglish() {}
}

在kotlin中,abstract的用法几乎和Java一致,当你使用abstract修饰符的时候,可以忽略open修饰符,因为被abstract修饰的类默认具有open属性。

修饰符 相应类的成员 注解
final 不能被覆写 在kotlin中默认所有的方法和类都是final属性
open 可以被覆写 需要被明确指出
abstract 必须要覆写 不能被实例化,默认具有open属性。
override 覆写超类的方法 如果没有被指定为final,则默认具有open属性

上述表格仅适用于基类,对于接口类来说,基本用不上fianl、open、abstract,因为接口类默认是open,且不能被声明为final,如果接口类的方法没有函数体,那么其为abstract,但是不需要你明确指出他是abstract的。

你可能感兴趣的:(kotlin学习笔记)