我经历了这个问题: Interface with default methods vs Abstract class in Java 8
以下部分对我不清楚:
默认方法的约束是它可以实现 仅在调用其他接口方法方面,没有 参考特定实现的状态。所以主要用例 是更高层次和更方便的方法。
我尝试在默认方法中创建具体类(实现)的对象并调用其实例方法,它工作正常。即,我不需要使用Interface类型作为对象的引用。
然后引用的段落是什么意思。
答案 0 :(得分:11)
该句子意味着在接口内实现default
方法,因此它不能访问对象的实际状态,而只能访问接口本身所暴露的内容,因为接口不能声明实例变量。
例如:
abstract class Foo {
int result;
int getResult() { return result; }
}
这不能在interface
中完成,因为您不能拥有任何成员变量。你唯一能做的就是结合多种接口方法,这就是它被指定为方便/更高级别的方法,例如:
interface Foo {
void preProcess();
void process();
void postProcess();
default void processAll() {
preProcess();
process();
postProcess();
}
}
答案 1 :(得分:5)
问题是默认方法只能“看到”接口本身声明的内容 - 而不是在实现类中。在实现此接口的类中声明的任何 state 字段都是无法访问的。但是他们可以访问界面的static final
个字段:
interface test {
static final int x = 3;
public default void changeIt() {
System.out.println(x); // this would work
++x; // this will fail
}
}
答案 2 :(得分:-3)
默认方法仅用于获得Backword_Compatibility支持。请注意,默认方法的优先级低于普通方法(或高级方法),因此您无法实现高级方法和便捷方法