【发布时间】:2017-10-12 02:48:48
【问题描述】:
假设我有以下结构:
abstract class A {
abstract boolean foo();
}
interface B {
default boolean foo() { return doBlah(); }
}
class C extends A implements B {
//function foo
}
Java 现在会抱怨 C 类必须从 A 实现抽象方法 foo。
我可以通过重新定义C 中的函数并简单地调用B.super.foo(); 来相对轻松地解决这个问题。
但是我不明白为什么接口 B 的默认函数不能自行满足这个要求,我想更好地了解 java 的底层机制。
【问题讨论】:
-
你能给出一些应用上下文来解释这个结构吗?例如,为什么类
A不实现接口B?那么C类应该只需要扩展A类即可从这两种超类型中受益。 -
这是正确的问题,我还没有看到正确的答案。当我们继承时,超类中的公共方法与子类中定义的方法一样好。所以我们可以想象 foo() 方法只在 C 类中实现。那么为什么编译器会抱怨呢?
标签: java java-8 default-method