kotlin中val和final有什么区别?

ADI*_*RAJ 2 java kotlin

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

Jof*_*rey 6

valvar用于区分只读和读/写变量和属性,openfinal定义可重写性。

finalKotlin 中默认有方法,但您可以声明它们open以允许子类重写该方法。final发生这种情况时,子类可以选择通过在关键字之外添加关键字来防止进一步重写override

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

请参阅https://kotlinlang.org/docs/inheritance.html#overriding-methods

定义和覆盖属性也是如此(请参阅文档中的下一部分):

open class Shape {
    open val vertexCount: Int = 0 // if this is final, we can't override it
}

class Rectangle : Shape() {
    override val vertexCount = 4
}
Run Code Online (Sandbox Code Playgroud)