インターフェースAにおいて、
sample()メソッドに実装が含まれていますが、defaultキーワードが抜けているため、コンパイルエラーとなります。インターフェース内で実装が含まれるメソッドはdefaultメソッドである必要があり、そのためにはメソッド宣言にdefaultキーワードが必要です。クラスBはインターフェースAを実装していますが、
sample()メソッドをオーバーライドしていません。もしsample()メソッドがインターフェースAでdefaultメソッドとして正しく定義されていれば、これは問題ではありません。クラスBはdefaultメソッドのデフォルト実装を継承し、オーバーライドする必要はありません。メインクラスとメインメソッドにおいて、インターフェースAの型の変数
aを使ってクラスBのインスタンスを作成し、sample()メソッドを呼び出しています。これは正しい使い方ですが、インターフェースAでsample()が正しくdefaultメソッドとして定義されていないため、このコードは動作しません。
画像のコードが正しく動作するための正しいインターフェースAの定義は次のようになります:
public interface A {
default void sample() {
System.out.println("sample");
}
}
この修正により、sample()メソッドはデフォルトメソッドとしてインターフェースAに実装され、クラスBはこのメソッドを継承し、メインメソッド内でa.sample();を呼び出すと"sample"がコンソールに出力されます。
Top comments (0)