JAVA默认方法如何调用

JAVA默认方法如何调用

作者:William Gu发布时间:2026-02-05阅读时长:0 分钟阅读次数:3

用户关注问题

Q
如何在接口中使用Java的默认方法?

我想了解Java接口中的默认方法是如何定义和使用的,怎样才能正确调用接口中的默认方法?

A

定义和调用Java接口默认方法的方法

在Java 8及以上版本,接口中允许定义默认方法,使用default关键字即可实现。在接口内,可以这样定义默认方法:

public interface MyInterface {
    default void defaultMethod() {
        System.out.println("这是一个默认方法");
    }
}

实现该接口的类可以直接调用这个默认方法,除非该类重写了该方法。例如:

public class MyClass implements MyInterface {
    // 如果不重写defaultMethod,可以直接调用接口的默认实现
}

调用方法示例:

MyClass obj = new MyClass();
obj.defaultMethod();  // 输出: 这是一个默认方法
Q
在实现类中如何调用接口的默认方法?

如果我在实现类中想调用接口中未被重写的默认方法,应该采用什么方式?

A

通过接口名指定调用接口默认方法

当在实现类中重写了接口的默认方法,但仍需调用接口中原有默认实现时,可以使用接口名加super关键字的方式实现。示例如下:

public interface MyInterface {
    default void defaultMethod() {
        System.out.println("接口默认方法");
    }
}

public class MyClass implements MyInterface {
    @Override
    public void defaultMethod() {
        System.out.println("重写后的方法");
        MyInterface.super.defaultMethod(); // 调用接口的默认方法
    }
}

这种方式有效避免覆盖接口默认方法时完全失去其实现细节。

Q
多个接口均定义了相同默认方法时如何调用?

当一个类实现了多个接口且这些接口都有同名相同签名的默认方法,该如何解决调用冲突并指定调用哪个接口的默认方法?

A

指定接口调用解决默认方法冲突

Java允许一个类实现多个接口,如果这些接口中包含同名同签名的默认方法,则实现类必须重写该默认方法来解决冲突。需要从特定的接口调用其默认实现时,可以使用如下方式:

interface InterfaceA {
    default void greet() {
        System.out.println("Hello from InterfaceA");
    }
}

interface InterfaceB {
    default void greet() {
        System.out.println("Hello from InterfaceB");
    }
}

public class MyClass implements InterfaceA, InterfaceB {
    @Override
    public void greet() {
        InterfaceA.super.greet();  // 调用InterfaceA的默认方法
        InterfaceB.super.greet();  // 调用InterfaceB的默认方法
    }
}

这样可以避免默认方法冲突,同时灵活调用各接口的默认实现。