Интерфейс не наследует классы Object
.Класс, который реализует интерфейс SubInterface
, наследует класс Object
.
Подумайте только, сможете ли вы вызвать doStuff
() из SubInterface
напрямую?Вам нужно реализовать этот интерфейс в другом классе, создать экземпляр этого класса, после чего вы можете вызвать doStuff()
.
Так что InterfaceAbstractCombination
класс реализует SubInterface
, и когда вы вызываете doStuff()
, вы вызываете егона экземпляре InterfaceAbstractCombination
, который предоставляет this.hashCode()
, унаследованном от класса Object
, поэтому this
будет ссылаться на экземпляр класса, реализующего интерфейс.
Одна вещь, которую следует отметить, есливы проверяете JLS spec
Если у интерфейса нет прямых суперинтерфейсов, то этот интерфейс неявно объявляет открытый абстрактный метод-член m с сигнатурой s, типом возврата r и предложением throwst соответствует каждому общедоступному методу экземпляра m с сигнатурой s, типом возврата r и оператором throws t, объявленным в Object, если интерфейс явно не объявил метод с такой же сигнатурой, тем же типом возврата и совместимым предложением throws.
Так вот почему вы можете звонить SuperInterface.super.hashCode();
.