当前位置: 首页 > 知识库问答 >
问题:

考特林的val和final有什么区别?

段宏毅
2023-03-14

在Kotlin中,val用于使变量/属性不可更改,那么final的用途是什么?正如我所知,在java中,final用于限制继承或使变量为常量,但在kotlin中,val是常量部分,那么final在kotlin中会做什么呢?

共有1个答案

颜奇希
2023-03-14

虽然使用val和var来区分只读变量和读/写变量及属性,但open和final定义了可重写性。

在Kotlin中,默认情况下方法是final,但您可以声明它们为open,以允许子类重写该方法。发生这种情况时,子类可以选择通过在关键字的基础上添加关键字final来阻止进一步的重写:

open class Shape {
    open fun draw() { /*...*/ }
}
open class Rectangle() : Shape() {
    // subclasses of Rectangle can't override draw()
    final override fun draw() { /*...*/ }
}

看见https://kotlinlang.org/docs/inheritance.html#overriding-方法

 类似资料:
  • 我最近读到了关键字,我很困惑!我找不到和关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变的变量,还有什么我遗漏的吗?

  • Kotlin中的和有什么区别? 如本链接所述: 只读属性声明的完整语法与可变属性声明的不同之处在于两个方面:它以val而不是var开头,并且不允许setter。 但就在前面有一个使用setter的示例。 为什么我们两者都需要? 这不是Kotlin中变量的重复,与Java的区别:“var”vs.“val”?因为我询问的是与文档中的特定示例相关的疑问,而不仅仅是一般性的疑问。

  • 我最近读到了关于const关键字的文章,我很困惑!我找不到const和val关键字之间的任何区别,我的意思是我们可以使用它们来生成一个不可变的变量,还有什么我遗漏的吗?

  • 问题内容: 最近有人问我这个问题。但是无法简明地解释究竟是什么将这两个概念区分开来。 例如 最终且不可变: 如果我现在写 我会收到编译器错误 不可变: 有用。 我认为这解释了它在应用中的一部分。但是我可以对这两个话题得到一个很好的,易于理解的解释吗? 问题答案: 意味着您不能将对象的引用更改 为指向另一个引用或另一个对象 ,但仍可以更改其状态(例如使用setter方法)。凡 不变 意味着对象的 实

  • 我对科特林是新来的。我想知道下面代码中这两个和之间的区别。 下面有两个片段:第一个片段使用表示,另一个片段使用表示相同的变量。

  • 我正在使用webpack来配置源代码映射。我想知道有人能澄清“val”和“evar-source-map”之间的区别吗?我个人看不出有什么区别。