调用在超类中被覆盖的默认接口方法

Siv*_*mar 3 java interface java-8 default-method

我有一个接口和抽象类。

public class TEST extends Abstract implements Inter2{
    void print() {
        toDO();
    }

    public static void main(String[] args) {
        new TEST().toDO();
    }
}

abstract class Abstract {

    public void toDO() {
        System.out.println("Abstract is called");
    }
}

interface Inter2 {

    default void toDO() {
        System.out.println("Inter2 is called");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想强制类接口默认方法而不是抽象类。

JB *_*zet 5

您必须在 TEST 类中覆盖 toDO:

@Override
public void toDO() {
    Inter2.super.toDO();
}
Run Code Online (Sandbox Code Playgroud)