【问题标题】:Interface semantic understanding界面语义理解
【发布时间】:2018-02-17 15:42:02
【问题描述】:

在堆栈溢出时发现这个问题: Can you call the parent interface's default method from an interface that subclasses that interface?

new BFunctionalInterface(){
            @Override
            public void doWork() {
            }}.doSomeWork();
            System.out.println("WUK WUK");

我知道它是一个匿名类。但是用 a 调用 doSomeWork 是什么意思? “。” doWork里面是什么意思?是调用A还是B的实现?

【问题讨论】:

  • 当您匿名实现接口 eBFunctionalInterface 时,我没有看到 doSomeWork() 定义的任何地方
  • 在 BImplementorClass 中被调用。

标签: java


【解决方案1】:

它在通过new BFunctionalInterface 创建的对象上调用doSomeWork

如果你合理地格式化它并从摘录中删除额外的},这会更清楚(它似乎是你没有显示开头的封闭块上的结束}),这是误导性的:

new BFunctionalInterface() {
    @Override
    public void doWork() {
    }
}.doSomeWork();
System.out.println("WUK WUK");

如果您将其分配给本地人然后拨打电话,那就更清楚了:

BFunctionalInterface instance = new BFunctionalInterface() {
    @Override
    public void doWork() {
    }
};
instance.doSomeWork();
System.out.println("WUK WUK");

除了第二次创建变量之外,它们的作用完全相同。

【讨论】:

  • 好的,这就像创建 Foo 类的对象并调用它的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2016-04-17
相关资源
最近更新 更多