无法继承 final class
Can not inherit from final class
我刚刚创建了我的第一个 android 库。在另一个应用程序中,我想从它扩展一个 class 。但它向我显示了一个错误:"Cannot extend from final 'library.com.kukaintro.activities.KukaIntro'".
如您所见,超级 class 中的 none 是最终的。如果我点击超级 class KukaIntro(在应用程序而不是图书馆),它会说:
这是我第一次创建图书馆。有人可以告诉我如何解决这个问题吗?
使用开放注解,阅读这里的文档。
https://kotlinlang.org/docs/reference/classes.html
在 Kotlin 中,与 Java 不同,默认情况下所有 classes 都被隐式标记为 final
。如果要从 class 继承,则必须在 class 声明之前显式添加 open
关键字。
open class Base(p: Int) {
}
如果你想覆盖超级 class 中的任何函数,你必须再次将 open
关键字添加到超级 class 和 override
关键字对于子 class.
中的覆盖函数是必需的
文档中的示例:
open class Foo {
open fun f() { println("Foo.f()") }
open val x: Int get() = 1
}
class Bar : Foo() {
override fun f() {
super.f()
println("Bar.f()")
}
override val x: Int get() = super.x + 1
}
Kotlin 文档:https://kotlinlang.org/docs/reference/classes.html#inheritance
这里是关于这个语言设计的讨论:https://discuss.kotlinlang.org/t/classes-final-by-default/166
我刚刚创建了我的第一个 android 库。在另一个应用程序中,我想从它扩展一个 class 。但它向我显示了一个错误:"Cannot extend from final 'library.com.kukaintro.activities.KukaIntro'".
如您所见,超级 class 中的 none 是最终的。如果我点击超级 class KukaIntro(在应用程序而不是图书馆),它会说:
这是我第一次创建图书馆。有人可以告诉我如何解决这个问题吗?
使用开放注解,阅读这里的文档。 https://kotlinlang.org/docs/reference/classes.html
在 Kotlin 中,与 Java 不同,默认情况下所有 classes 都被隐式标记为 final
。如果要从 class 继承,则必须在 class 声明之前显式添加 open
关键字。
open class Base(p: Int) {
}
如果你想覆盖超级 class 中的任何函数,你必须再次将 open
关键字添加到超级 class 和 override
关键字对于子 class.
文档中的示例:
open class Foo {
open fun f() { println("Foo.f()") }
open val x: Int get() = 1
}
class Bar : Foo() {
override fun f() {
super.f()
println("Bar.f()")
}
override val x: Int get() = super.x + 1
}
Kotlin 文档:https://kotlinlang.org/docs/reference/classes.html#inheritance
这里是关于这个语言设计的讨论:https://discuss.kotlinlang.org/t/classes-final-by-default/166