DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

7章4

  1. インターフェースAにおいて、sample()メソッドに実装が含まれていますが、defaultキーワードが抜けているため、コンパイルエラーとなります。インターフェース内で実装が含まれるメソッドはdefaultメソッドである必要があり、そのためにはメソッド宣言にdefaultキーワードが必要です。

  2. クラスBはインターフェースAを実装していますが、sample()メソッドをオーバーライドしていません。もしsample()メソッドがインターフェースAでdefaultメソッドとして正しく定義されていれば、これは問題ではありません。クラスBはdefaultメソッドのデフォルト実装を継承し、オーバーライドする必要はありません。

  3. メインクラスとメインメソッドにおいて、インターフェースAの型の変数aを使ってクラスBのインスタンスを作成し、sample()メソッドを呼び出しています。これは正しい使い方ですが、インターフェースAでsample()が正しくdefaultメソッドとして定義されていないため、このコードは動作しません。

画像のコードが正しく動作するための正しいインターフェースAの定義は次のようになります:

public interface A {
    default void sample() {
        System.out.println("sample");
    }
}
Enter fullscreen mode Exit fullscreen mode

この修正により、sample()メソッドはデフォルトメソッドとしてインターフェースAに実装され、クラスBはこのメソッドを継承し、メインメソッド内でa.sample();を呼び出すと"sample"がコンソールに出力されます。

Top comments (0)