【发布时间】:2018-01-16 20:10:29
【问题描述】:
我有以下情况:
class C {
static void m1() {}
}
interface I {
default void m1() {}
}
//this will give compilation error : inherited method from C cannot hide public abstract method in I
class Main extends C implements I {
}
以下是我的问题:
我知道实例方法会覆盖默认方法,但是如果类中的静态方法与接口中的默认方法具有相同的签名怎么办?
-
如果
class C中的静态方法m1()是公开的,那么编译错误将是:静态方法 m1() 与 I 中的抽象方法冲突。
因此,当访问修饰符为默认时,它试图隐藏,而当它是公共的时,它是冲突的。为什么会有这种差异?它背后的概念是什么?
【问题讨论】:
-
你使用的是哪个编译器?
-
这不应该依赖于默认实现或访问级别的存在——在我看来,编译错误应该是相同的。 eclipse中一直是“This static method cannot hide the instance method from I”,用oracle jdk 1.8.0_121 "[path]/A.java:[5,17] m1() in [path].A无法实现[path] 中的 m1().I 覆盖方法是静态的“
-
我也在使用 1.8,它显示不同的编译错误
标签: java inheritance multiple-inheritance default-method