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() {}
}