Методами по умолчанию являются методы экземпляра. ( JLS 9.4: объявления методов )
Методы экземпляра вызываются на конкретных экземплярах объектов.Но вызов метода экземпляра выполняется посредством ссылки на объект типа, который объявляет этот метод.Этот тип может быть суперклассом или интерфейсом фактического типа объекта во время выполнения.
Это позволяет нам писать код, который может работать с несколькими типами объектов через общий интерфейс - один вид полиморфизма.
Внутри метода экземпляра вы можете вызывать другие методы экземпляра, доступные черезтип, содержащий вызывающий метод экземпляра.
При желании это можно сделать с помощью ключевого слова this
, определенного как ссылка на объект, для которого был вызван метод экземпляра, типа, в котором появляется ключевое слово.Ключевое слово this
может использоваться в методах по умолчанию.( JLS 15.8.3: это )
Итак, в вашем случае ваш метод по умолчанию может вызвать либо this.voo()
, либо просто voo()
.
public interface test {
String voo();
default void foo() {
this.voo().toString(); // Can call an instance method accessible through this type.
voo().toString(); // Equivalent call
}
}