interface MyInterface {
    default int someMethod() {
        return 0;
    }

    int anotherMethod();
}

class Test implements MyInterface {
    public static void main(String[] args) {
        Test q = new Test();
        q.run();
    }

    @Override
    public int anotherMethod() {
        return 1;
    }
    
    void run() {
        MyInterface a = () -> someMethod();
        System.out.println(a.anotherMethod());
    }
}

执行结果将为0,虽然我预期为1.我不明白为什么不返回重写方法的结果,而返回默认方法的结果.

推荐答案

因为您使用了另一个带有lambda的实现,其中另一个方法的实现是"某个方法".您可以使用lambda创建接口.在这种情况下,你需要

MyInterface a = new Test(); System.out.println(a.anotherMethod());

或者:

    MyInterface a = () -> 1;
    System.out.println(a.anotherMethod());

Java相关问答推荐

ActivityCompat.请求收件箱自动拒绝权限

更新我们的一个文物后出现了严重的符号引用错误

SQlite for Android无法使用json_group_array/json_object

Java记录的不同序列化/反序列化

将不受支持的时区UT重写为UTC是否节省?

为什么JAVA&S清洁器使用链表而不是并发HashSet?

具有阻塞方法的开源库是否应该为执行提供异步选项?

使用UTC时区将startDatetime转换为本地时间

MySQL数据库中未应用具有Spring数据的唯一约束

在Eclipse中数组的可空性

二进制数据的未知编码/序列化

无法播放音频:从资源加载库GStreamer-Lite失败

Spring Validator批注不起作用

组合连接以从两个表返回数据

将BlockingQueue+守护程序线程替换为执行器

控制器建议异常处理

验证没有';t work on Hibernate Entity';s字段

如何使用stream.allMatch()为空流返回false?

MapStruct记录到记录的映射不起作用

将天数添加到ZonedDateTime不会更改时间