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

Kotlin中的open和override方法之间的区别?,kotlin,Kotlin,这是一个例子。有人能解释一下区别吗? 此处必须使用open关键字吗?默认情况下,Kotlin中的函数定义为final。 这意味着您无法覆盖它们。如果从函数v()中删除open,则在类Derived中会出现一个错误,即函数v是最终的,无法重写 当您用打开标记函数时,它不再是最终,您可以在派生类中重写它 类上的open注释与Java的final相反:它允许其他人从该类继承,因为默认情况下Kotlin中的所有类都是final。[] 只有在将类声明为open之后,我们才能继承该类 只有在基类中打开的方法

这是一个例子。有人能解释一下区别吗?
此处必须使用open关键字吗?

默认情况下,Kotlin中的函数定义为
final
。 这意味着您无法覆盖它们。如果从函数
v()
中删除
open
,则在类
Derived
中会出现一个错误,即函数
v
是最终的,无法重写

当您用
打开
标记函数时,它不再是
最终
,您可以在派生类中重写它

类上的
open
注释与Java的
final
相反:它允许其他人从该类继承,因为默认情况下Kotlin中的所有类都是
final
。[]

只有在将类声明为
open
之后,我们才能
继承该类


只有在基类中打开的方法才能被重写。注释
override
通过继承类发出重写基方法的信号。

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


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

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

函数:在函数上,您需要
打开
才能覆盖它。默认情况下,所有函数都是
final
,您不能覆盖它们


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

我有一个内部抽象类,可以不使用任何 问题我也可以随意重写它的抽象方法 宣布它们是开放的


抽象类是要继承的,因为您不能实例化它们。事实上,默认情况下,它们不仅是打开的,而且不能是最终的<代码>最终版
摘要
不兼容。
abstract
方法也是如此,必须重写它们

为什么要用Java标记它?您可能想检查一下:但是“public”关键字呢?我可以从“公共类”继承吗?
open class Base {

    open fun v() {}

    fun nv() {}
}

class Derived() : Base() {

    override fun v() {}
}