Мы часто используем интерфейсы для определения определенных контрактов. Как и интерфейс Runnable, который определяет метод run (), который будет вызываться исполнителями. В качестве альтернативы это может быть класс с абстрактным методом, концептуально он такой же.
Вам также необходим такой контракт для точки входа вашего Java-приложения. Вполне естественно, что вы искали его где-то в базовых классах Java, таких как Object.
Однако метод main () отличается. Его «контракт» определяется не интерфейсом, а спецификацией, то есть спецификацией языка Java. Весь §12 посвящен выполнению, а §12.1.4 определяет «контракт» для метода main ().
Следует отметить, что нередко определенные "контракты" определяются не интерфейсами или абстрактными методами, а формальной спецификацией. Другим примером этого являются методы readObject () и writeObject ().