1 константу (переменную или свойство ?)
В интерфейсах в качестве полей можно объявлять только константы.
JLS 9.3:
Каждое объявление поля внутри интерфейса по умолчанию является public, static, final. Для таких полей допускается избыточное указание нескольких или всех таких модификаторов.
Аналогично, все методы в интерфейсе неявно имеют модификаторы public.
В main мне разрешило создать объект (?) этого интерфейса с описанием реализации всех методов.
Экземпляр интерфейса создать невозможно, так как интерфейсы по умолчанию абстрактные, в том числе даже если интерфейс является маркером и не содержит никаких абстрактных методов или содержит только реализации статических/дефолтных методов:
interface MyInterface {
default void foo() {}
}
MyInterface interfaceInstance = new MyInterface(); // compilation error: MyInterface is abstract; cannot be instantiated
Serializable serializable = new Serializable(); // compilation error: Serializable is abstract; cannot be instantiated
При описании реализации всех методов (множество абстрактных методов интерфейса может быть пустым) создаётся анонимный внутренний класс и соответственно экземпляр такого класса.
MyInterface myInstance = new MyInterface() {}; // ok, only default method
System.out.println(myInstance.getClass());
// class MyClass$1
System.out.println(Arrays.toString(myInstance.getClass().getInterfaces()));
// [interface MyInterface]
Serializable serializable = new Serializable() {}; // ok, marker interface
System.out.println(serializable.getClass());
// class MyClass$2
System.out.println(Arrays.toString(serializable.getClass().getInterfaces()));
// [interface java.io.Serializable]