java - 如何从另一个子类调用默认接口(interface)方法?

标签 java multiple-inheritance default-method

考虑以下几点:

//Fooable.java
public interface Fooable {
    public default void foo() {
        System.out.println("Fooable::foo");
    }
    //Lots of other non-default methods...
}

//MyFooable.java
public class MyFooable implements Fooable {
    @Override
    public void foo() {
        System.out.println("MyFooable::foo");
    }
    //implements other methods in Fooable...
}

//MyAdvancedFooable.java
public class MyAdvancedFooable extends MyFooable {
    @Override
    public void foo() {
        Fooable.super.foo();
        System.out.println("MyAdvancedFooable::foo");
    }
    public static void main(String[] args) {
        new MyAdvancedFooable().foo();
    }
}

如你所见,我想调用foo()Fooable来自 MyAdvancedFooable (MyFooable 的子类)。但是,当我尝试编译时,出现以下错误:

MyAdvancedFooable.java:4: 错误:不是封闭类:Fooable Fooable.super.foo();

如果我尝试 MyAdvancedFooable extends MyFooable implements Fooable我得到以下信息:

MyAdvancedFooable.java:4: 错误:默认 super 调用中错误的类型限定符 Fooable Fooable.super.foo(); 方法 foo() 在 MyFooable 中被覆盖

如何在不必创建 Fooable 的新匿名实现的情况下解决此问题?

最佳答案

你只能调用上一层的方法,所以你需要

Fooable.super.foo();

MyFooable 中,而只是在 MyAdvancedFooable 中调用 super.foo()

关于java - 如何从另一个子类调用默认接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43718920/

相关文章:

java - 许多类文件中的一个代码部分

JavaFX 缩放至全屏

C++如何从具有不同返回类型的接口(interface)进行多重继承?

c++ - 新运算符前的括号 - 含义?

inheritance - Kotlin 强制实现类成为另一种类型的父类(super class)型

java - Gephi 的 java 默认方法未使用 ikvm-from dll 库在 C# 中实现

java - 在调整窗口大小之前,ScrollPane 不会显示

java - 从 servlet 获取 jsp 页面的 Html

Python多重继承: Number of arguments for class construction and __init__() method misaligned and resulting in TypeErrors

java - 使用 ECJ 的 Lambda/默认方法/类型删除怪癖/错误?