如何覆盖Kotlin中的Java公共类方法?
我需要从Kotlin类中的Java公共类重新定义/重写方法:
// Java public class BaseOne { public static void m1() {} } // Kotlin class BaseTwo : BaseOne() { override fun m1() {} }
但得到一个错误: m1 overrides nothing
。
如果我删除override
注释,我得到Accidental override: The following declarations have the same JVM signature
。
在Java这工作正常,但不是在Kotlin 🙁
UPD:工作的Java代码
public class BaseTree extends BaseOne { public static void m1() {} }
UPD2 “Curiouser和curiouser!” (с)
我有下一个代码:
// Java class public class BaseOne { public static void m1() { System.out.println("BaseOne"); } } // Kotlin class class BaseTwo : BaseOne() { companion object { fun m1() { println("BaseTwo") } } } // Java class public class BaseThree extends BaseOne { public static void m1() { System.out.println("BaseThree"); } }
当我从Java运行这个代码时,
public class Main { public static void main(String[] args) { BaseOne.m1(); BaseThree.m1(); BaseTwo.m1(); } }
我收到:
BaseOne BaseThree BaseOne
正如你所看到的 – 覆盖/重新定义/“隐藏”不起作用
但是,如果我从Kotlin的main
运行它
fun main(args: Array) { BaseOne.m1() BaseThree.m1() BaseTwo.m1() }
全部按预期工作:
BaseOne BaseThree BaseTwo
我的另一个问题是 – 如何编写具有相同行为的代码? 有关于它的文档吗?
您正在重写一个静态方法,重写取决于有一个类的实例。
public class BaseOne { public void m1() {} }