【发布时间】:2018-05-31 01:43:33
【问题描述】:
我知道如果一个类实现了多个包含同名默认方法的接口,那么我们需要在子类中重写该方法,以便明确定义我的方法将做什么。
问题是,见下文代码:
interface A {
default void print() {
System.out.println(" In interface A ");
}
}
interface B {
default String print() {
return "In interface B";
}
}
public class C implements A, B {
@Override
public String print() {
return "In class C";
}
public static void main(String arg[]) {
// Other funny things
}
}
现在接口 A 和 B 都有一个名为“print”的默认方法,但我想覆盖接口 B 的打印方法 - 返回字符串并保持 A 的打印不变的方法。但是这段代码不能编译给出这个:
Overrides A.print
The return type is incompatible with A.print()
显然编译器试图覆盖 A 的 print 方法,我不知道为什么!
【问题讨论】:
-
狂想:改变“实现”列表的顺序
-
@flowtron 我的第一个直觉是一样的,不起作用。
-
也许一个实现 A 并将其打印定义为 final 的类可以让你到达那里.. 另一个疯狂和 hack-y 的想法。
-
@flowtron 当然必须有其他方法解决这个问题,但我想知道为什么这个功能是这样设计的。
标签: java interface java-8 overriding default-method