インターフェースのデフォルトメソッド
インターフェースはデフォルトメソッドも定義できます。インターフェースstaticメソッドと同様に、デフォルトメソッドのバイトコードは、コンパイルされたクラスファイルに存在します。
デフォルトメソッドのインストルメンテーションを構成するときは、次に従います。
- ターゲットがデフォルトメソッドをオーバーライドしないクラスである場合、対象とするインターフェイスにクラスマッチを使用する
- ターゲットがデフォルトメソッドをオーバーライドするクラスの場合は、インターフェイスマッチを使用する
インターフェイス デフォルト メソッドを直接インストゥルメント化
以下のインターフェースの場合
package jdk8;
interface InterfaceForConcreteClassDefaultMethod
{
default int sum(int acc, int x)
{
return acc + x;
}
}
およびその実装クラス
package jdk8;
class ClassForDefaultMethod implements InterfaceForConcreteClassDefaultMethod
{
}
この例では、 はデフォルトのメソッドをオーバーライドしません。従って、インターフェースに対して以下のようにクラスマッチを使用することができます。
オーバーライドされたデフォルトメソッドのインストゥルメント化
以下のインターフェースの場合
package jdk8;
interface InterfaceForAnonymousClassDefaultMethod
{
default int sum(int acc, int x)
{
return acc + x;
}
}
結果 :
InterfaceForAnonymousClassDefaultMethod i = new InterfaceForAnonymousClassDefaultMethod()
{
@Override
public int sum(int acc, int x)
{
return acc + x;
}
};
メソッドがオーバーライドされるため、ターゲットバイトコード InterfaceForAnonymousClassDefaultMethod