Я создал анонимный класс, реализовав интерфейс I внутри открытого статического метода void main (). Так, согласно Java 8 для абстрактного метода test (), реализация обеспечивается из метода Implement () класса C.
Итак, внутри публичного статического метода void main (), печатая _interface.getClass (), я получил
package_path.Main $$ Lambda $ 1/310656974, что совершенно нормально. Поскольку это печатает анонимное имя класса.
Кроме того, _interface указывает на анонимный объект в куче, и поэтому я делаю _interface.test ();
Итак, первое утверждение, которое теперь имеет метод test (), - это напечатать имя класса,
Но, в конце концов, то, что было напечатано,
package_path.C (сообщая, что C - это имя класса). Как это возможно? Разве не следует печатать package_path.Main $$ Lambda $ 1/310656974? Потому что «это» означает анонимный внутри метода теста, верно?
@java.lang.FunctionalInterface
interface I {
void test();
}
class C {
void imple() {
System.out.println(this.getClass());
System.out.println("Inside Implementation");
}
}
class Main {
public static void main(String[] args) {
I _interface = new C()::imple;
System.out.println(_interface.getClass());
_interface.test();
}
}