Kotlin中的open和override方法之间的区别?

Dee*_*pan 14 kotlin

open class Base {

    open fun v() {}

    fun nv() {}
}

class Derived() : Base() {

    override fun v() {}
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子.有人可以解释一下这个区别吗?这里是否必须打开关键字?

Wil*_*zel 35

是的,这两个open关键字在您的示例中都是必需的


您必须区分使用open类和函数.

类:open如果要从类继承,则需要在类上使用关键字.默认情况下,所有类都是final继承的,不能继承.

功能:在功能上,您需要open能够覆盖它.默认情况下,所有功能都是final,您无法覆盖它们.


编辑:因为我在评论中看到了一些混乱.

pokemzok:我有一个内部抽象类,我可以继承而没有任何问题.我也可以随意覆盖它抽象方法而不将它们声明为开放

抽象类是继承的,因为您无法实例化它们.事实上,他们不仅仅是open默认,他们不能final放在第一位.final并且abstract不兼容.这同样适用于abstract方法,它们必须被重写!