相关疑难解决方法(0)

超类方法和接口默认方法冲突解决

考虑下面的例子,

public class Testing extends SupCls implements Intf {
    public static void main(String[] args) {
        new Testing().test();
    }
}

class SupCls {
    public void test() {
        System.out.println("From SupCls");
    }
}

interface Intf {
    public default void test() {
        System.out.println("From Intf");
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,SupCls类和Intf接口之间没有任何联系.但两者都定义了一种常用方法.

Testing类的扩展SupCls和实现Intf.

所以,当我在输出test()上调用方法时Testing,

From SupCls
Run Code Online (Sandbox Code Playgroud)

我认为这是有道理的,因为从类扩展应该比从接口实现更高的优先级.

但是eclipse报告不然,如下面的屏幕截图所示.

Eclipse的屏幕截图

我坚信这是Eclipse中的一个错误.

但在假设之前,是否在JLS中定义并记录了此行为?或者还有其他什么来定义这种行为?

编辑:Eclipse版本是Mars Release(4.5.0),如果重要的话.

java eclipse java-8 default-method

11
推荐指数
2
解决办法
2198
查看次数

阴影接口的默认方法

考虑以下情况,

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我得到了非常期待的输出.

Test
Test
Test
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关Java-8默认方法的内容,特别是有关扩展包含默认方法的接口的内容

2 nd bullet:重新声明默认方法,使其成为抽象方法.

在上面的例子中,我有这有相同名称的默认方法两个接口,当我实现了这两个我才能够达到执行printHelloTest是指IFace2.

我对此几乎没有疑问, …

java java-8 default-method

6
推荐指数
2
解决办法
501
查看次数

标签 统计

default-method ×2

java ×2

java-8 ×2

eclipse ×1