例を見てみましょう:
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」が許可されないのはなぜですか? 」を読みました。
デフォルト メソッドの基本的な考え方は、デフォルトの実装を持つインターフェイス メソッドであり、派生クラスがより具体的な実装を提供できることです。
そして、可視性がその側面をまったく壊さないように思えます。
リンクされた質問と同様に、クローズするのに問題があるように見えるため、意見に基づくものではなく、この問題について信頼できる回答をいただければ幸いです。