相关疑难解决方法(0)

在Java中显式调用默认方法

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?
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到上面的代码,你会如何A.foo()从B类方法调用?

java inheritance interface java-8 default-method

217
推荐指数
4
解决办法
5万
查看次数

Java实现两个接口并解决默认方法冲突:为什么使用super关键字?

Java解析默认方法冲突:为什么使用super关键字?

我正在阅读"不耐烦的核心Java SE 9"这本书.在"解决默认方法冲突"一节中,我发现在解决默认方法冲突时,会使用super关键字.但我不明白为什么要使用super关键字.

从这个链接:https://docs.oracle.com/javase/tutorial/java/IandI/override.html 我知道super关键字是必需的(否则程序将无法编译).

但这似乎违反直觉.根据我的理解,界面" Identified"没有超级类.为什么不用" return Identified.getId();"?

public interface Person {
    default int getId() {
        return 0;
    }
}

public interface Identified {
    default int getId() {
        return Math.abs(hashCode());
    }
}

public class Employee implements Person, Identified {
    public int getId() {
        return Identified.super.getId();
    }
}
Run Code Online (Sandbox Code Playgroud)

这个问题和这个问题有一些解释,但没有一个解释为什么使用关键字super.

java interface multiple-inheritance

5
推荐指数
1
解决办法
667
查看次数