举个例子:
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());
}
}
简单地说,这将打印Hello world!
. 但是假设我正在使用 的返回值做其他事情Testerface#example
,例如初始化数据文件并返回不应离开实现类的敏感内部值。为什么 Java 不允许在默认接口方法上使用访问修饰符?为什么它们不能被子类保护/私有并可能被提升(类似于扩展父类的类如何为被覆盖的方法使用更可见的修饰符)?
一个常见的解决方案是转移到一个抽象类,但是在我的具体情况下,我有一个枚举接口,所以这里不适用。我想它要么被忽略了,要么是因为接口背后的原始想法是它们是可用方法的“合同”,但我想我想输入关于这件事的看法。
我读过“为什么 Java 8 接口方法中不允许使用“final”? ”,其中指出:
默认方法的基本思想是:它是具有默认实现的接口方法,派生类可以提供更具体的实现
在我看来,能见度根本不会破坏这方面。
与链接的问题一样,因为它似乎无法关闭,因此在此问题上将不胜感激权威答案,而不是基于意见的答案。