显式调用Java中的默认方法

转到0:

Java 8引入了默认方法,以提供扩展接口的功能,而无需修改现有的实现。

我想知道当由于不同接口中的默认实现冲突而导致该方法的默认实现被重写或不可用时,是否可以显式调用该方法的默认实现。

interface A {
    default void foo() {
        System.out.println("A.foo");
    }
}

class B implements A {
    @Override
    public void foo() {
        System.out.println("B.foo");
    }
    public void afoo() {
        // how to invoke A.foo() here?
    }
}

考虑上面的代码,您将如何A.foo()从B类的方法调用

理查德·廷格(Richard Tingle):

按照这篇文章,你在界面访问默认方法A使用

A.super.foo();

这可用于如下(假设接口AC两个有默认的方法foo()

public class ChildClass implements A, C {
    @Override    
    public void foo() {
       //you could completely override the default implementations
       doSomethingElse();
       //or manage conflicts between the same method foo() in both A and C
       A.super.foo();
    }
    public void bah() {
       A.super.foo(); //original foo() from A accessed
       C.super.foo(); //original foo() from C accessed
    }
}

A并且C可以同时具有.foo()方法,可以选择特定的默认实现,也可以将一个(或两个)用作新foo()方法的一部分您还可以使用相同的语法在实现类中的其他方法中访问默认版本。

方法调用语法的形式描述可以在JLS第15章中找到

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从动态代理显式调用默认方法?

用于在方法调用中显式指定泛型参数的Java语法

在.then()中显式调用resolve()

Java:如何显式调用方法的自己的类版本?

Java-泛型类的显式方法调用?

如何在C ++中显式调用抛出异常的方法?

隐式与显式默认构造函数调用

没有显式调用的方法的 Java 堆栈帧(调用站点)

显式声明默认Java类序列化方法的原因是什么?

有什么方法可以无序使用默认参数,而不必在Python函数中显式传递它们?

如何在没有反射和动态代理的情况下简单地显式调用默认方法?

Android StrictMode java.lang.Throwable:未调用显式终止方法“ close”

如何在不指定类的情况下使用显式类型参数调用Java方法?

如何避免通过pythonnet在python中的IDisposable对象上显式调用Dispose方法?

是否需要显式调用system.loadLibrary来访问NativeActivity子类中的本机方法?

如何在C#中的基类上调用显式接口方法?

在主环境中调用没有显式接收器的方法

glDeleteFramebuffers显式调用

如何在Java中显式调用静态初始化器?

为什么C ++和Java中的构造函数调用需要显式类型参数?

Java切换案例-默认与显式枚举

C ++ 17中的显式默认构造函数

在没有显式引用的方法上调用扩展方法

在Java中显式提供向上转换

Java中的显式对象转换

Java中的显式类型转换示例

多维数组中的Java显式声明

为什么在没有显式调用的情况下调用默认函数?

显式调用琐碎的默认构造函数会导致额外的赋值调用