Подтвердить что ты не робот

Почему интерфейс в Java-8 позволил получить основной метод?

Почему интерфейс позволяет иметь main метод в Java 8?

Как указано в приведенном ниже коде, он отлично работает и правильно выводит результат.

public interface Temp {
    public static void main(String args[]){
         System.out.println("Hello");
    }
}

ВЫХОД (после запуска Temp.java)

Hello

В чем разница между основным методом interface и class?

В настоящее время он ведет себя как класс и I выполнил interface с помощью основного метода.

Зачем нам это нужно?


ИЗМЕНИТЬ

Добавление большего к существующему вопросу из комментария, изложенного ниже (Брайан Гетц)

Если мы теперь явно запретили методы main, что staticметоды допустимы в interfaces (или, что то же самое, исключить 'interface classes' в качестве целей для java-пусковой установки.)


4b9b3361

Ответ 1

Так как Java 8, в интерфейсах разрешены статические методы.

main() - статический метод.

Следовательно, main() разрешено в интерфейсах.

Мы не нуждаемся в, так как раньше это было недопустимо, и все же мы выжили. Но поскольку статические методы, по определению, не привязаны к экземпляру класса, а к самому классу, имеет смысл разрешить их в интерфейсах. Он позволяет определять методы утилиты, связанные с интерфейсом (например, те, что найдены в Collections, например), в самом интерфейсе, а не в отдельном классе).

Нет никакой разницы между статическими методами класса и статическими методами интерфейса.

Ответ 2

Я второй ответ @jb-nizet. Для этого нет "отчаянной необходимости", но он устраняет ненужное ограничение. Например. одним из примеров является то, что вы можете теперь объявить метод factory в интерфейсе:

 public interface SomeService {

   public static SomeService getInstance() {
     // e.g. resolve via service provider interface
   }

   ...

 }

Перед Java 8 нам всегда нужен отдельный класс factory. Один из любимых примеров - API для API приложений Google.

Ответ 3

В Java 8 интерфейс может иметь статические методы. Поскольку основной метод также является статическим методом, он это позволит.

Мы можем объявлять общие вспомогательные методы, используя эти статические методы.