Java8からdefaultメソッドを使用することで、interfaceに実装が持てるようになった。
defaultメソッド内で this を使うとthisは個別実装クラスを指すことになる。

public interface SampleInterface {
    default void sampleDefault() {
        System.out.println(this.getClass().getSimpleName());
    }
}

public class SampleImpl implements SampleInterface {
    public void original() {
    }
}

public class Caller {
    public void call() {
        SampleImpl impl = new SampleImpl();
        impl.sampleDefault();
        // SampleImplと出力される。
    }
}

これは例外のStackTraceを補完する情報として利用できる。
sampleDefault()で例外を投げたとすると、StackTraceには次のようになる。

Exception
at SampleInterface.sampleDefault(SampleInterface.java:行数)
at Caller.call(Caller.java:行数)

この情報だけではSampleImplが実装クラスであるとわからず、Caller.javaの該当行数を見ないといけない。

sampleDefaultの中でthisを使い、Exceptionの引数messageに入れてあげるとすると、StackTraceにSampleImplの情報を表示することができる。