3

假设我们在接口中有一个默认方法,在实现类时,如果我们需要在默认方法之外添加一些额外的逻辑,我们是否必须复制整个方法?有没有可能重用默认方法......就像我们对抽象类所做的那样

super.method()
// then our stuff...
4

1 回答 1

8

你可以像这样调用它:

interface Test {
    public default void method() {
        System.out.println("Default method called");
    }
}

class TestImpl implements Test {
    @Override
    public void method() {
        Test.super.method();
        // Class specific logic here.
    }
}

这样,您可以通过限定super接口名称轻松决定调用哪个接口默认方法:

class TestImpl implements A, B {
    @Override
    public void method() {
        A.super.method();  // Call interface A method
        B.super.method();  // Call interface B method
    }
}

这就是为什么super.method()行不通的原因。因为如果类实现多个接口,这将是模棱两可的调用。

于 2015-03-10T16:02:01.580 回答