为什么 Java 8 不允许非公共缺省方法?
让我们举个例子:
public interface Testerface {
default public String example() {
return "Hello";
}
}
public class Tester implements Testerface {
@Override
public String example() {
return Testerface.super.example() + " world!";
}
}
public class Internet {
public static void main(String[] args) {
System.out.println(new Tester().example());
}
}
简单地说,这将打印 。但是,假设我正在对 返回值 执行其他操作,例如初始化数据文件并返回不应离开实现类的敏感内部值。为什么 Java 不允许在缺省接口方法上使用访问修饰符?为什么它们不能受到保护/私有,并且可能被子类提升(类似于扩展父类的类如何为重写的方法使用更明显的修饰符)?Hello world!
Testerface#example
一个常见的解决方案是移动到抽象类,但是在我的特定情况下,我有一个枚举接口,所以这在这里不适用。我想它要么被忽视了,要么是因为接口背后的原始想法是可用方法的“契约”,但我想我想我想输入一下这是怎么回事。
我读过“为什么Java 8接口方法中不允许”最终“?”,其中指出:
默认方法的基本思想是:它是具有默认实现的接口方法,派生类可以提供更具体的实现
在我看来,能见度根本不会破坏这一方面。
与链接的问题一样,因为它似乎在关闭时遇到了麻烦,因此在此事上,权威的答案将不胜感激,而不是基于意见的答案。