考虑以下情况,
interface IFace1 {
default void printHello() {
System.out.println("IFace1");
}
}
interface IFace2 {
void printHello();
}
public class Test implements IFace1, IFace2 {
public static void main(String[] args) {
Test test = new Test();
test.printHello();
IFace1 iface1 = new Test();
iface1.printHello();
IFace2 iface2 = new Test();
iface2.printHello();
}
@Override
public void printHello() {
System.out.println("Test");
}
}
在上面的示例中,我得到以下输出,这是非常预期的。
Test
Test
Test
我一直在阅读Java-8
默认方法,特别是关于扩展包含默认方法的接口
第二个项目符号:重新声明默认方法,使其抽象。
在上面的示例中,我有两个具有相同名称的默认方法的接口,当我实现这两个接口时,我只能访问其中引用printHello
的实现。Test
IFace2
我对此有几个问题,
- 我怎样才能达到的
printHello
方法,IFace1
如果我不能比为什么? - 这种行为不会让我远离预期的性质,
IFace1
现在可能会被其他方法所掩盖吗?
引用说,您可以在它的子界面中创建该default
方法。例如,abstract
interface IFace2 extends IFace1 {
void printHello();
}
在这里,当我实施时,我IFace2
实际上无法达到default
这种方法,IFace1
这正是我的情况。